在jdk1.2以前的版本如果要實作線程的暫停、恢複和停止的方法分别是suspend()、resume()、stop()。但是從jdk1.2以後這些方法已經被遺棄,因為它們有可能造成嚴重的系統錯誤和異常。
首先suspend()方法不會釋放線程所占用的資源。如果使用該方法将某個線程挂起,則可能會使其他等待資源的線程死鎖。而resume()方法本身并無問題,但是不能獨立于suspend()方法存在。
其次調用stop()可能會導緻嚴重的系統故障。因為該方法會使線程立刻中斷指令執行,不管這段方法是否執行完畢。如果這個線程正在做重要的操作,對程式的運作起着支撐作用,這時如果突然中斷其執行則會導緻系統崩潰。
現在,這些方法已經不适合挂起和終止線程了,但是可以在run()方法中設定一些标志,通過線上程内部檢測标志判斷并調用wait()方法和notify()方法操作線程的挂起、恢複和正常終止。
下面通過示例來示範這些操作。
運作結果:
測試線程第1次運作…
測試線程第2次運作…
測試線程第3次運作…
測試線程第4次運作…
測試線程第5次運作…
測試線程第6次運作…
測試線程第7次運作…
測試線程第8次運作…
測試線程第9次運作…
測試線程第10次運作…
測試線程第11次運作…
測試線程第12次運作…
測試線程第13次運作…
測試線程第14次運作…
測試線程第15次運作…
測試線程第16次運作…
測試線程第17次運作…
測試線程第18次運作…
測試線程第19次運作…
測試線程第20次運作…
測試線程即将被挂起…
測試線程即将被喚醒…
測試線程第21次運作…
測試線程第22次運作…
測試線程第23次運作…
測試線程第24次運作…
測試線程第25次運作…
測試線程第26次運作…
測試線程第27次運作…
測試線程第28次運作…
測試線程第29次運作…
測試線程第30次運作…
終止測試線程…
測試線程第31次運作…
主線程終止…