回覆列表
  • 1 # 星辰大洋

    題主沒有給出完整程式碼和執行結果,我分析這段程式碼是沒有問題的,可以正確執行。

    這段程式碼裡,使用了SaveMoney類物件的鎖,這個物件在執行時有且只有一個例項,這就保證了這段程式碼在執行時,同時只能有一個執行緒獲得鎖,其他的執行緒都要等待鎖持有執行緒釋放鎖之後才能進入。所以題主需要補充一下,鎖不住這個結論時怎麼得出的。

    我還原了這段程式碼,並給出執行結果如下:

    執行程式碼,應該與題主的一致

    執行結果表明,三個執行緒互斥執行同步程式碼塊。

  • 2 # 李昂35

    程式碼沒發全。但是還是可以猜一下,我猜account是這個類的一個普通成員變數。你new了三個這個類的instance,所以在記憶體裡有三個account被三個thread操作,即使你sync這個類的class,也不會起作用。兩個基本解決方案:1,把account宣告成static。 2,把這個類從繼承thread變成實現runnable,在main方法裡只new一個這個類的例項,併發的thred都用這一個例項。

    還有很多Java的獨有的辦法解決這個問題,例如: 用atomicinteger來做account,就不需要sync了

  • 中秋節和大豐收的關聯?
  • 以色列為何近年敢於公開和美國對立?