在某些情況下,線程將爭奪顯示器,此時一個線程應該贏,Java是否使用CPU中內置的原子CAS操作來實現這些顯示器的獲取,如果不是這樣工作的話?如何在Java中實現同步塊?
1
A
回答
0
我不這麼認爲,因爲在concurrent
包,你可以找到Atomic*
類在內部使用CAS。
另一件事是它取決於你使用什麼樣的jvm。因此,在目前的形式中,除了告訴你CAS在其他地方被使用之外,你的問題不是真正的答案。
0
CAS是什麼讓所有併發工作在硬件級別。如果你想在所有線程中改變內存中的一個值,CAS是最快的方法;任何其他技術也將使用CAS。所以爲了快速改變,CAS是要走的路。但是如果你有100個甚至5個值要改變,你最好使用同步。它將執行一個CAS來鎖定顯示器,另一個解鎖它,但其餘的是正常的存儲器讀取和寫入,這比CAS快得多。當然,你的顯示器是鎖定的,這可能會掛起其他線程,減慢你的程序並可能浪費CPU。
更大的問題是,在Java中,任何CAS(或讀/寫易失性和同步/不同步)都伴隨着其他線程的內存視圖更新。當你寫一個volatile時,讀取它的線程可以看到通過編寫線程所做的所有內存更改。這包括將寄存器值轉儲到內存,刷新緩存,更新緩存以及將數據放回寄存器。但是這些費用與CAS相平行,所以如果你有了一個解決方案,你也有另一個解決方案。
的基本思想,我認爲,從程序員的角度來看,就是用易揮發或原子操作單讀取和寫入和同步multiples-- 如果沒有其他令人信服的理由,選擇了一個另一方面。
相關問題
- 1. 如何實現同步java關鍵字?
- 2. 如何實現同步Java方法
- 3. 同步塊與在Java中
- 4. 如何在java中使用同步方法實現線程同步?
- 5. 如何在Java中實現類級同步?
- 6. 如何在Java中實現同步方法超時?
- 7. 同步塊 - Java
- 8. Java同步塊
- 9. 同步和java中的同步塊
- 10. Java中同步方法ans同步塊
- 11. 如何實現同步多線程中的Java應用程序
- 12. Java同步寫塊
- 13. Java/Android:同步vs隊列實現
- 14. Java靜態同步vs BlockingQueue實現
- 15. 在Linux內核中實現正確的模塊間同步
- 16. 在Java中執行兩個同步塊
- 17. 爲什麼我不能在java中同步實例塊?
- 18. 如何使用異步模塊在nodejs中實現回滾?
- 19. Scala:Barrier同步是如何實現的?
- 20. 如何實現RustBox的同步?
- 21. 如何實現同步類PHP?
- 22. 如何實現ISR和main()同步?
- 23. 如何在Java中實現
- 24. 如何在Java中實現
- 25. 如何在Java中實現
- 26. 如何在Java中實現
- 27. java線程同步問題,如何實現可觀察線程
- 28. 通過node.js +異步模塊實現同步回調
- 29. 在Ruby中實現同步屏障
- 30. 如何在java中實現可停止和可取消的文件夾同步?
這是一個VM實現細節。 –
你不需要執行該操作 –
它爲什麼重要?同步使用確保其目標所需的任何特定於平臺的方式來提供其併發性保證;在根本不支持併發的系統中,或者當Java可以證明該方法永遠不會被同時訪問時,它甚至可以被優化爲noop。他們究竟是如何實現的是你不需要擔心的實現細節,如果你的Java實現沒有提供這種保證,那麼它將不得不是一個錯誤或者(很少)與標準存在偏差。 –