線程基本控制

主要有:sleep()、supend()、resume()、join()、interrupt()、stop方法,一般情況下都會引起線程的狀態發生轉變。


1、使用sleep()方法暫停線程執行

     說明:Thread.sleep()使當前線程的執行暫停一段指定時間,使得其他線程或者執行在當前計算機上的其他進程。

                 該方法不會放棄除CPU外的其他資源。sleep有兩個重載版本,一個以毫秒爲單位指定睡眠時間、另外

                 一個以納秒爲單位指定睡眠時間。但並不保證時間的精確。另外中斷(interrupt)可以終止線程睡眠,所

                以在任何時候都不能假設線程會睡眠指定時間。

     注意:sleep方法聲明可以拋出InterruptedException異常,當另一個線程中斷了已經處於睡眠(sleep)的線程時

                就會拋出InterruptedException異常。


2、使用join()方法等待另外一個線程結束

     說明:join方法讓一個線程等待另外一個線程完成。例如有兩個線程T1和T2,當在T1中執行T2.join(),會導致T1暫

                 停當前線程等待T2線程的終止。同樣join方法有兩個重載的方法,join的另外一個重載版本允許線程等待指

                 定時間。跟sleep方法一樣,這裏的時間是不精確的。


3、使用interrupt()方法取消線程

     說明:已經啓動的線程是活躍的,即isAlive()方法返回true,線程終止之前一直是活躍的。有三種方法可以使線程

                 終止:1)run方法正常返回;2)run方法意外終止;3)應用程序終止。

                 我們可以通過中斷(interrupt)方法來請求取消線程,並讓線程自己來監控並響應中斷。中斷請求通常是用

                 戶希望能夠終止線程的執行,但是並不會強制線程的終止,但是它會中斷線程的睡眠狀態,比如調用sleep()

                 和wait()方法後。

                 線程自己檢查中斷狀態並終止線程比直接調用stop()方法更安全,因爲線程可以保存狀態。並且stop()方法已

                 經不推薦使用。

                與中斷線程相關的方法:1)interrupt,向線程發出中斷請求;2)isInterrupted,測試線程是否已經被中斷;

                3)Interrupted,測試當前線程是否已經被中斷,然後清除線程的“中斷”狀態的靜態方法。

                線程的中斷狀態只能有線程自己清除,當線程偵測到自己被中斷時,經常需要再響應中斷前做一些清除工作,

                這些清除工作可能涉及哪些在線程仍然保持中斷狀態時會受影響的操作。

                如果被中斷的線程正在執行sleep或者wait方法時,就會拋出InterruptedException異常。這種拋出異常的中斷

                會清除線程的中斷狀態。

                大體上線程的中斷操作都應該通過interrupt來取消阻塞操作。


4、使用stop()方法終止線程

      說明:在Thread類中提供stop()方法強迫線程停止執行,但是已經過時了。該方法具有固有的不安全性。用stop()方

                  法終止線程將釋放它已經鎖定的所有監視器(作爲沿堆棧向上傳播的未檢查的ThreadDeath異常的自然結果)

                  。如果以前受這些監視器的保護的任何對象都處於一種不一致的狀態,則損壞的對象將對其他線程可見,這有

                  可能導致任意的行爲。stop的使用方式都應該由只修改某些變量以指示目標線程應該停止運行的代碼來替代。

                  目標線程應該定期檢查這些變量,並且如果這些變量指示它停止運行,則從其執行方式依次返回。如果目標線

                  程等待很長時間(例如基於一個條件變量),則應使用interrupt方法來中斷該等待。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章