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

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

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

    夢想飛翔

    自強不息
    posts - 111, comments - 30, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    1.2中斷線程

    Posted on 2009-02-25 14:29 love1563 閱讀(210) 評論(0)  編輯  收藏 所屬分類: Java語言*高級版

            線程將在它的run方法返回時終止。在    JDK1.0中,還存在一個stop方法,其他線程可以調用它來終止線程。不過這個方法現在已經被棄用了。
            盡管現在已經沒有強制終止線程的方法了,但是你還是可以用interrupt方法來請求終止一個線程。

            當interrupt方法在一個線程上被調用時,該線程的中斷狀態(interrupted status)將會被置位。這是一個布爾型的標志,存在于每一個線程之中。每個線程都應該不時地檢查這個標志,已判斷線程是否應該被中斷。
            為了查明中斷狀態是否被置位了,需要首先調用靜態的thread.currentThread方法來取得當前線程,然后調用它的isInterrupted方法:
            
    while(!Thread.currentThread().isInterrupted()&&more work to do)
    {
         
    do more work
    }
            盡管如此,如果一個線程被阻塞了,它就無法檢查中斷狀態了。這就是產生InterruptedException異常的地方。當在一個被阻塞的線程上調用interrupt()方式時,阻塞調用(例如sleep或者wait)就會被InterruptedException異常終止。
            沒有任何語言方面的需求要求一個被中斷的線程應該終止。中斷一個線程只是為了引起該線程的注意,被中斷線程可以決定如何應對中斷。某些線程非常重要,以至于它們應該不理會中斷,而是在處理完拋出的異常之后繼續執行。但是更普遍的情況是,一個線程將把中斷看做一個終止請求。這種線程的run()方法遵循如果的形式:

            
        public void run()
        
    {
           
    try {
            .
            
            
    while (Thread.currentThread().isInterrupted() && more work to do{

                
    do more work
            }

        }
     catch (InterruptedException e) {
            Thread was interrupted during sleep or wait
        }
     finally{
            cleanup 
    if required
        }

        
    //exiting the run method terminates the thread
        }
                如果你在每次工作迭代之后都調用sleep方法,那么這個inIterrupted檢查就不是必須的。如果你在中斷狀態被置位時調用sleep方法,那么sleep方法將拋出一個InterruptedException異常。因此,如果你循環調用sleep,就要花點心思檢查中斷狀態并捕獲
    InterruptedException異常。這樣的run方法的形式如下所示:
        public void run()
        
    {
           
    try {
            .
            
            
    while (more work to do{

                
    do more work
                Thread.sleep(delay);
            }

        }
     catch (InterruptedException e) {
            Thread was interrupted during sleep or wait
        }
     finally{
            cleanup 
    if required
        }

        
    //exiting the run method terminates the thread
        }

     

            當sleep方法拋出一個InterruptedException異常時,它同時也會清除中斷狀態。
            你會在很多發布的代碼中發現InterruptedException異常被抑制在了一個很低的層次上,就像這樣:

    public void mySubTask()
        
    {
           
    try {
                    Thread.sleep(delay);
            }

        }
     catch (InterruptedException e) {}//don't ignore
            
        }

            不要這樣做!如果你不能很好地在catch字句中來處理異常,那么你還又兩個合理的選擇:
            1)在catch字句中,調用Thread.currentThread().interrupt()來設置中斷狀態。然后調用者可以對其進行測試:

    public void mySubTask()
        
    {
           
    try {
                    Thread.sleep(delay);
            }

        }
     catch (InterruptedException e) {Thread.currentThread().interrupt()}
            
        }

     

            2)或者更好的方法,標記你的方法將拋出InterruptedException異常,讓調用(或者,最終的run方法)就能夠捕獲該異常。

        public void mySubTask() throws InterruptedException
        
    {
                    Thread.sleep(delay);
        }
          線程如果中斷后再休眠則會修改中斷狀態。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品免费αv视频| 国产精品亚洲精品日韩电影| 高清永久免费观看| 亚洲精品高清在线| 久久99精品免费一区二区| 四虎影视精品永久免费| 亚洲av无码专区亚洲av不卡| 高清国语自产拍免费视频国产| 亚洲中文字幕无码av| 日韩免费a级在线观看| 狠狠热精品免费观看| 亚洲一区精品伊人久久伊人| 一边摸一边桶一边脱免费视频| 亚洲午夜无码片在线观看影院猛| 国产精品免费视频观看拍拍| 亚洲国产a∨无码中文777| 免费在线看污视频| 亚洲午夜成激人情在线影院| 久久WWW免费人成人片| 久久精品国产亚洲av天美18| 久久久久亚洲?V成人无码| 久久久久国产精品免费看| 亚洲熟妇无码爱v在线观看| 全免费a级毛片免费看不卡| 一级特级aaaa毛片免费观看| 亚洲成AV人片在线观看ww| 免费观看美女用震蛋喷水的视频 | 久久亚洲AV永久无码精品| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 久久久久国产亚洲AV麻豆| 成人性生交大片免费看中文| 亚洲香蕉免费有线视频| 成人永久免费高清| a级毛片毛片免费观看永久| 亚洲国产综合精品| 天堂亚洲免费视频| 7x7x7x免费在线观看| 久久精品国产亚洲AV电影网| 亚洲电影一区二区| 在线观着免费观看国产黄| 免费毛片a线观看|