<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    keep moving!

    We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
    隨筆 - 37, 文章 - 2, 評論 - 3, 引用 - 0
    數據加載中……

    Design Pattern: Two-phase Termination 模式

    Two-phase Termination直譯的話是「兩相終止」,不過就這個模式而言,該譯作「兩階段終止」比較適當,想像您有一個執行緒正在週期性的運作,在「運作階段」您送出了停止執行緒的請求,這時候執行緒不該慌張的馬上終止目前的工作,而是先完成這一次週期的工作,然後進入「善後階段」完成一些善後的工作,例如關閉檔案或網路串流,所謂的兩階段終止,即中止「運作階段」,並完成「善後階段」,完整的完成執行緒的工作。

    以Java的Thread終止而言,不建議您直接使用stop()方法來終止執行緒,stop()方法會丟出ThreadDeath例外強迫執行緒終止,即使執行緒正在運作階段或執行至synchronized區,如果您要終止執行緒,建議自行實作,例如:
      public class SomeThread extends Thread {
        private boolean isTerminated = false;

        public void terminate() {
            isTerminated = true;
        }

        public void run() {
            while(!isTerminated) {
                // ... some statements
            }
        }
     }
     
    考慮到有時執行緒可能會執行至sleep()或wait()而進入Not Runnable狀態,使用上面的方法可能會延遲終止的請求,因而可以在要求終止時再呼叫interrupt()方法,這會丟出 InterruptedException,而使得執行緒從Not Runnable狀態中離開,因此可以改變一下程式:
     public class SomeThread extends Thread {
        private boolean isTerminated = false;

        public void terminate() {
            isTerminated = true;
            interrupt();
        }

        public void run() {
            try {
                while(!isTerminated) {
                    // ... some statements
                }
            }
            catch(InterruptedException e) {
            }
        }
     }
     
    在發出中止請求之後,如果執行緒是在Not Runnable狀態,會丟出InterruptedException,如果這個例外沒有先被捕捉,就會被run()中的catch InterruptedException捕捉,也就是說會直接離開while迴圈,因而如果您在發出終止請求後,要求先執行完這一個週期的工作,您要先捕捉這個例外,若不用完成這一個週期的工作,則不用捕捉這個例外,要如何作取決於您的程式。

    如果執行緒要完成這一個週期的工作,在下一個週期開始之前檢查旗標,這時它的結果是false,所以離開while迴圈,這時候您可以進行一些善後工作,這個可以寫在finally區塊中,例如:
     public class SomeThread extends Thread {
        private boolean isContinue = false;

        public void terminate() {
            isTerminated = true;
            interrupt();
        }

        private void doWorkBeforeShutdown() {
            // .... do some work before shutdown
        }

        public void run() {
            try {
                while(!_isTerminated) {
                    // ... some statements
                }
            }
            catch(InterruptedException e) {
            }
            finally {
                doWorkBeforeShutdown();
            }
        }
     }
     
    上面這個程式大致上就是Two-phase Termination模式的架構,另外如果您的執行緒還服務著其它的物件,則在送出終止請求到完全終止之前,應該停止服務其它物件,您可以讓其它物件要求服務之前,先查詢執行緒是否已被要求終止,這可以藉由提供一個方法來達到:
     public class SomeThread extends Thread {
        private boolean isTerminated = false;

        public void terminate() {
            isTerminated = true;
            interrupt();
        }

        public boolean isTerminated() {
            return _isTerminated;
        }

        private void doWorkBeforeShutdown() {
            // .... do some work before shutdown
        }

        public void run() {
            try {
                while(!_isTerminated) {
                    // ... some statements
                }
            }
            catch(InterruptedException e) {
            }
            finally {
                doWorkBeforeShutdown();
            }
        }
     }


    張金鵬 2007-04-17 10:58 發表評論

    文章來源:http://www.tkk7.com/jesson2005/articles/111202.html

    posted on 2008-09-07 11:06 大石頭 閱讀(129) 評論(0)  編輯  收藏 所屬分類: 多線程

    主站蜘蛛池模板: 免费A级毛片无码A∨免费| 亚洲国产成人精品无码一区二区| 亚洲欧洲国产综合AV无码久久| 3344免费播放观看视频| 夜夜亚洲天天久久| 久9这里精品免费视频| 亚洲高清在线视频| 最近中文字幕mv免费高清在线| 亚洲黄色免费网站| 免费观看成人毛片a片2008| 亚洲色偷偷色噜噜狠狠99网| 浮力影院第一页小视频国产在线观看免费 | 亚洲色WWW成人永久网址| 精品国产呦系列在线观看免费| 久久久久亚洲精品天堂久久久久久| 五月婷婷免费视频| 亚洲大尺度无码无码专区| 久热免费在线视频| 亚洲av乱码一区二区三区| 啦啦啦手机完整免费高清观看 | 国产成人亚洲精品| 国产免费人成在线视频| 一个人免费播放在线视频看片| 亚洲成在人线av| 97视频热人人精品免费| 日韩大片在线永久免费观看网站| 国产亚洲精AA在线观看SEE| 4虎永免费最新永久免费地址| 亚洲精品美女久久7777777| 亚洲美女高清一区二区三区| 最近中文字幕大全免费版在线| 亚洲精品日韩专区silk| 日韩免费无码一区二区视频| 一级做a爰全过程免费视频毛片| 亚洲尹人九九大色香蕉网站| 女人被男人桶得好爽免费视频 | japanese色国产在线看免费| 亚洲av日韩av激情亚洲| 日韩中文无码有码免费视频| 日本免费A级毛一片| 亚洲欧美自偷自拍另类视|