最近學習多線程的知識,看到API里說這些方法被廢棄了,就查了一下原因
Thread.stop
這個方法會解除被加鎖的對象的鎖,因而可能造成這些對象處於不一致的狀態,而且這個方法造成的ThreadDeath異常不像其他的檢查期異常一樣被捕獲。
可以使用interrupt方法代替。事實上,如果一個方法不能被interrupt,那stop方法也不會起作用。
Thread.suspend, Thread.resume
這倆方法有造成死鎖的危險。使用suspend時,並不會釋放鎖;而如果我想先獲取該鎖,再進行resume,就會造成死鎖。
可以使用object的wait和notify方法代替。wait方法會釋放持有的鎖。
Runtime.runFinalizersOnExit
這個方法本身就是不安全的。它可能導致終結器(finallizers)被在活動對象上被調用,而其他線程正在並發操作這些對象。而且,這個調用不是“線程安全”的,因為它設置了一個VM全局標志。