zoookeeper UncaughtExceptionHandler

一個線程運行過程中 如果發(fā)生不可恢復(fù)的錯誤 會導(dǎo)致線程退出.在java的世界里面 提供了UncaughtExceptionHandler 讓應(yīng)用開發(fā)人員捕捉到這種異常情況.jdk注釋如下.

/**
     * Interface for handlers invoked when a <tt>Thread</tt> abruptly
     * terminates due to an uncaught exception.
     * <p>When a thread is about to terminate due to an uncaught exception
     * the Java Virtual Machine will query the thread for its
     * <tt>UncaughtExceptionHandler</tt> using
     * {@link #getUncaughtExceptionHandler} and will invoke the handler's
     * <tt>uncaughtException</tt> method, passing the thread and the
     * exception as arguments.
     * If a thread has not had its <tt>UncaughtExceptionHandler</tt>
     * explicitly set, then its <tt>ThreadGroup</tt> object acts as its
     * <tt>UncaughtExceptionHandler</tt>. If the <tt>ThreadGroup</tt> object
     * has no
     * special requirements for dealing with the exception, it can forward
     * the invocation to the {@linkplain #getDefaultUncaughtExceptionHandler
     * default uncaught exception handler}.
     *
     * @see #setDefaultUncaughtExceptionHandler
     * @see #setUncaughtExceptionHandler
     * @see ThreadGroup#uncaughtException
     * @since 1.5
     */

學(xué)習(xí)zookeeper 源碼過程中 發(fā)現(xiàn)zookeeper 提供了Listener這種更友好的方法 代碼如下
ZookeeperThread

/**
 * This is the main class for catching all the uncaught exceptions thrown by the
 * threads.
 */
public class ZooKeeperThread extends Thread {

    private static final Logger LOG = LoggerFactory
            .getLogger(ZooKeeperThread.class);

    private UncaughtExceptionHandler uncaughtExceptionalHandler = new UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread t, Throwable e) {
            handleException(t.getName(), e);
        }
    };

    public ZooKeeperThread(Runnable thread, String threadName) {
        super(thread, threadName);
        setUncaughtExceptionHandler(uncaughtExceptionalHandler);
    }

    public ZooKeeperThread(String threadName) {
        super(threadName);
        setUncaughtExceptionHandler(uncaughtExceptionalHandler);
    }

    /**
     * This will be used by the uncaught exception handler and just log a
     * warning message and return.
     *
     * @param thName
     *            - thread name
     * @param e
     *            - exception object
     */
    protected void handleException(String thName, Throwable e) {
        LOG.warn("Exception occured from thread {}", thName, e);
    }
}

ZooKeeperCriticalThread

/**
 * Represents critical thread. When there is an uncaught exception thrown by the
 * thread this will exit the system.
 */
public class ZooKeeperCriticalThread extends ZooKeeperThread {
    private static final Logger LOG = LoggerFactory
            .getLogger(ZooKeeperCriticalThread.class);
    private final ZooKeeperServerListener listener;

    public ZooKeeperCriticalThread(String threadName,
            ZooKeeperServerListener listener) {
        super(threadName);
        this.listener = listener;
    }

    /**
     * This will be used by the uncaught exception handler and make the system
     * exit.
     *
     * @param threadName
     *            - thread name
     * @param e
     *            - exception object
     */
    @Override
    protected void handleException(String threadName, Throwable e) {
        LOG.error("Severe unrecoverable error, from thread : {}", threadName, e);
        listener.notifyStopping(threadName, ExitCode.UNEXPECTED_ERROR);
    }
}

**ZooKeeperServerListener **

/**
 * Listener for the critical resource events.
 */
public interface ZooKeeperServerListener {

    /**
     * This will notify the server that some critical thread has stopped. It
     * usually takes place when fatal error occurred.
     * 
     * @param threadName
     *            - name of the thread
     * @param errorCode
     *            - error code
     */
    void notifyStopping(String threadName, int errorCode);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末天通,一起剝皮案震驚了整個濱河市泊窘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌像寒,老刑警劉巖烘豹,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诺祸,居然都是意外死亡携悯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門筷笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔鬼,“玉大人,你說我怎么就攤上這事胃夏≈峄颍” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵构订,是天一觀的道長侮叮。 經(jīng)常有香客問我,道長悼瘾,這世上最難降的妖魔是什么囊榜? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮亥宿,結(jié)果婚禮上卸勺,老公的妹妹穿的比我還像新娘。我一直安慰自己烫扼,他們只是感情好曙求,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著映企,像睡著了一般悟狱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堰氓,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天挤渐,我揣著相機與錄音,去河邊找鬼双絮。 笑死浴麻,一個胖子當(dāng)著我的面吹牛得问,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播软免,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼宫纬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了膏萧?” 一聲冷哼從身側(cè)響起漓骚,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎向抢,沒想到半個月后认境,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡挟鸠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年叉信,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘希。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡硼身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出覆享,到底是詐尸還是另有隱情佳遂,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布撒顿,位于F島的核電站丑罪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凤壁。R本人自食惡果不足惜吩屹,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拧抖。 院中可真熱鬧煤搜,春花似錦、人聲如沸唧席。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淌哟。三九已至迹卢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徒仓,已是汗流浹背婶希。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓬衡,地道東北人喻杈。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像狰晚,于是被迫代替她去往敵國和親譬挚。 傳聞我的和親對象是個殘疾皇子醒串,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器宣增,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • 第三章 這個冒險居然是…… (接上回……) 若蘭正發(fā)呆中,突然唐曉翼說話了:“喂漾抬,你走不走了盈简,還要不要協(xié)助我了...
    Sernedipity閱讀 927評論 0 10
  • 這最后的防線看來也快抵擋不了多久了,這時派出去的幾個騎士回來了告訴大家驃騎王離開了携取,那些盟軍說沒有他的命令不會來...
    憶先生閱讀 285評論 0 4
  • 我自從上了大學(xué)之后攒钳,總會時不時在空閑時間瀏覽各種訂閱文章和公眾號。有不少公眾號都會有討論的話題雷滋,大多數(shù)都挺有趣味的...
    搖曳未生姿閱讀 244評論 0 0