1. 程式人生 > >Java 執行緒的suspend()和stop()不安全的原因

Java 執行緒的suspend()和stop()不安全的原因

一、suspend()不安全的原因

       在Java中執行緒的suspend()方法用於懸掛起一個執行緒,但是它之前持有的鎖卻沒有釋放。那麼其他等待該鎖的執行緒就會一直等待,直到該執行緒被resume(),那麼在這種情況下,有可能造成迴圈等待,進而死鎖。因此Java已經不推薦使用該方法。

二、stop()方法不安全的原因

      在Java中執行緒的stop()方法用於停止一個執行緒,而且是立即停止。那麼這裡會出現一個問題,一些本應該是類似事務過程可能沒有一次完成(原子性),從而造成資料錯亂。

      比如 下面這種,x,y理應同時被賦值,如果執行緒剛賦值了x就被強制停止了,那麼就出現了問題。

            synchronized(this){
                      x=1;
                      y=2
                   }
      

        因此stop()方法也廢棄了。