<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);
        }
          線程如果中斷后再休眠則會修改中斷狀態。

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


    網站導航:
     
    主站蜘蛛池模板: 精品国产麻豆免费网站| 无码乱肉视频免费大全合集| 免费一级毛片不卡不收费| 亚洲精品久久久久无码AV片软件| 日韩色视频一区二区三区亚洲| 成年在线网站免费观看无广告 | 亚洲妇熟XXXX妇色黄| a级片免费观看视频| 亚洲av无码专区在线播放| 69视频免费观看l| 亚洲国产成人91精品| 成人免费福利电影| 国产精品亚洲精品日韩动图| 免费看小12萝裸体视频国产| 国产免费牲交视频免费播放| 国产AV无码专区亚洲Av| 香蕉成人免费看片视频app下载| 亚洲人成网址在线观看| 日本一区二区三区免费高清| 亚洲中文字幕无码av| 亚洲AV蜜桃永久无码精品| fc2免费人成为视频| 亚洲人成电影亚洲人成9999网| 91在线视频免费91| 国产精品亚洲专区无码WEB| 亚洲综合精品网站| 99视频在线免费看| 亚洲av色香蕉一区二区三区蜜桃| 波多野结衣中文一区二区免费| 中文在线观看国语高清免费| 亚洲短视频在线观看| 全部免费a级毛片| 未满十八18禁止免费无码网站| 亚洲日本久久一区二区va| 精品亚洲一区二区三区在线观看| 久久久高清日本道免费观看| 亚洲欧美国产精品专区久久| 亚洲人成网站在线播放vr| 日韩在线免费视频| a毛片免费观看完整| 亚洲色大18成人网站WWW在线播放|