使用共享變量的方式
在這種方式中,之所以引入共享變量,是因為該變量可以被多個執行相同任務的
線程用來作為是否中斷的信號,通知中斷線程的執行。
使用 interrupt 方法終止線程
如果一個線程由於等待某些事件的發生而被阻塞,又該怎樣停止該線程呢?這種
情況經常會發生,比如當一個線程由於需要等候鍵盤輸入而被阻塞,或者調用
Thread.join()方法,或者 Thread.sleep()方法,在網絡中調用
ServerSocket.accept()方法,或者調用了 DatagramSocket.receive()方法時,都
有可能導致線程阻塞,使線程處於處於不可運行狀態時,即使主程序中將該線程
的共享變量設置為 true,但該線程此時根本無法檢查循環標志,當然也就無法立
即中斷。這里我們給出的建議是,不要使用 stop()方法,而是使用 Thread 提供的
interrupt()方法,因為該方法雖然不會中斷一個正在運行的線程,但是它可以使一
個被阻塞的線程拋出一個中斷異常,從而使線程提前結束阻塞狀態,退出堵塞代
碼。