我是Java的新手,正在苦於其中的一些概念。我在Java Tutorial Oracle上看到這樣的說法:「線程主要通過共享字段訪問和對象引用字段引用進行通信。」有人可以向我解釋它是什麼意思的「對象引用字段引用」?什麼是「對象引用」?提前致謝!!努力理解這個概念:線程主要通過共享字段和對象引用字段進行通信參考
0
A
回答
1
這裏的the quote:
線程通過共享來訪問領域的主要溝通和對象引用字段參考。這種通信形式非常有效,但會產生兩種錯誤:線程干擾和內存一致性錯誤。防止這些錯誤所需的工具是同步。
引用是指向內存中的對象的指針。共享引用意味着屬於一個線程正在執行的對象的引用被複制到另一個線程正在訪問的對象中。
比方說,我們有一個隊列,其中一些線程將東西放入隊列中,其他線程正在從隊列中取出東西。當一個線程將一個對象放入隊列中時,它首先引用該對象的線程(稱爲生產者),然後將其放入隊列後隊列引用該對象。然後,消耗隊列中某些項目的其他線程就會出現並從隊列中取出對象,現在消費者線程正在引用它。所以對象引用會在線程之間傳遞。
本教程討論了爲了使引用可靠地從一個線程傳遞到另一個線程而需要採取的措施。對跨線程可見的對象進行更改的開銷太大,當您想要將更改發佈到另一個線程時,您必須執行特定的操作,例如鎖定或使用volatile關鍵字。
1
一個非常基本的答案是,當一個線程訪問一個對象時,其他線程不應該能夠同時訪問同一個對象,並且他們也不應該能夠訪問這些對象引用。
關於對象引用,如上面鏈接引用What is Object Reference Variable?。
引用是用來描述指向對象所在的內存位置的指針。
線程應該在它們之間使用對象和對象引用共享時間,確保避免死鎖對象中的線程永遠不會釋放對象以供其他線程使用。
相關問題
- 1. 靜態概念相當於通過參考概念
- 2. 通過IndexEmbedded對子類字段進行索引
- 3. 說明:不要通過共享內存進行通信;通過交流
- 4. 通過共享awk中的字段的行循環
- 5. 通過調用共享DLL在兩個線程之間進行信息交換
- 6. 如何通過嵌套對象字段進行排序?
- 7. 努力通過PHP瞭解JSON解析
- 8. 參考非共享成員需要的對象引用
- 9. 自由對象的字段通過Rtti
- 10. 通過服務線程進行通信
- 11. 爲MapPath的字段對象參考
- 12. 通過共享內存使用Thrift進行IPC通信
- 13. 新來的C和努力使用*,&參考對象
- 14. 如何通過PHP中的對象字段對對象數組進行排序?
- 15. 如何通過Java中的某個字段對某些對象進行分組?
- 16. Python:如何通過兩個字段對數組進行排序?
- 17. 基本概念:在兩個視圖之間進行通信?
- 18. 努力理解Python包和進口statment
- 19. 我應該爲使用通用字段的對象共享UI嗎?
- 20. 通過使用oops編程的概念
- 21. JPA:通過外鍵引用的表的另一個字段進行索引
- 22. 主鍵和索引概念
- 23. 使用C++進行線程安全並通過參考傳遞
- 24. VB.NET中的跨線程通信和字段更新
- 25. 線程之間可以通過LINX通信進行通信嗎?
- 26. EJB - 如何通過非索引字段進行搜索?
- 27. 通過浮點或雙字段算法進行索引
- 28. 共享內存進程間通信
- 29. 努力瞭解一些cookie /數據庫購物車的概念
- 30. 共享對象並從主線程中控制線程執行
請參閱「[使用對象](https://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html)」。 – Andreas
[什麼是對象引用變量?](http://stackoverflow.com/questions/16504084/what-is-object-reference-variable) – Andreas