Java中的stop和suspend方法是兩種特定的線程控制方法,它們都被定義在Thread類中。但是,這兩種方法都已被標記為不安全的而且已經(jīng)被棄用,使用這兩種方法的代碼將不再安全,甚至容易導(dǎo)致死鎖。因此,現(xiàn)在的Java程序員應(yīng)該避免使用stop和suspend方法。
stop方法是一種突然終止線程的方法。當(dāng)你調(diào)用這個方法時,線程立即停止并釋放所有的鎖和資源,從而可能會導(dǎo)致正在執(zhí)行的任務(wù)無法正常完成。如果其他線程正在使用與當(dāng)前線程相關(guān)的鎖和資源,那么這些線程可能會被鎖死,從而導(dǎo)致死鎖情況。因此,stop方法不適合在大部分情況下使用。
public class StopThread extends Thread { private boolean stopped = false; public void run() { while(!stopped) { //some code here } } public void stopThread() { stopped = true; } }
suspend方法用于暫停線程的執(zhí)行。此方法可能會使線程停滯在執(zhí)行過程中的某個地方,同時保持所采用的所有鎖和資源。如果其他線程需要使用暫停的線程所擁有的資源,那么這些線程可能會被鎖死,從而導(dǎo)致死鎖情況。suspend方法也容易引發(fā)線程死鎖,因此也不應(yīng)該使用。
public class SuspendThread extends Thread { private boolean suspended = false; public void run() { while(true) { if(suspended) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //some code here } } public void suspendThread() { suspended = true; } public synchronized void resumeThread() { suspended = false; notify(); } }
在Java中,通過使用wait/notify或者Lock/Condition機制,可以很好地代替stop和suspend方法。這兩種方法雖然可能看起來很簡單,但是潛在的風(fēng)險是巨大的,因此在編寫Java多線程代碼時,應(yīng)該盡量避免使用這兩種方法。