我有一個Java線程相關的問題。Java線程同步,最佳併發實用程序,讀操作
舉一個非常簡單的例子,可以說我有2個線程。
線程A運行StockReader Class實例
線程B運行StockAvgDataCollector Class實例
在線程B,StockAvgDataCollector收集一些市場數據連續地,做了一些重均值/處理和更新的成員變量spAvgData
在線程中Stockreader可以使用getspAvgData()方法訪問StockAvgDataCollector實例及其成員spAvgData。
因此,線程A只執行讀操作,線程B執行讀/寫操作。
問題
現在,我需要在這種情況下同步或原子功能或鎖定或併發相關的東西?線程A讀取較舊的值並不重要。
因爲線程A只進行讀取操作而不更新任何內容,只有線程B執行任何寫入操作,是否會出現死鎖情況?
我從以下鏈接粘貼了一段。從該段看來,我確實需要擔心某種鎖定/同步。
http://java.sun.com/developer/technicalArticles/J2SE/concurrency/
讀/寫鎖
當使用一個線程來讀取一個對象的數據,你不一定需要防止另一個線程在同一時間讀取數據。只要線程只讀取數據而不改變數據,沒有理由不能並行讀取數據。 J2SE 5.0 java.util.concurrent.locks包提供了實現這種類型鎖定的類。 ReadWriteLock接口維護一對相關的鎖,一個用於只讀,另一個用於寫入。 readLock()可以由多個讀者線程同時保存,只要沒有寫者。 writeLock()是獨佔的。理論上,很明顯,使用讀寫器鎖來增加併發性會比使用互斥鎖取得更好的性能。但是,這種性能改進只能在多處理器上完全實現,並且數據讀取的頻率與被修改的頻率以及讀取和寫入操作的持續時間相比較。
哪個併發工具在我的例子中會更便宜和適用?
java.util.concurrent.atomic?
java.util.concurrent.locks?
java.util.concurrent.ConcurrentLinkedQueue? - 在這種情況下,StockAvgDataCollector將被添加並且StockReader將被刪除。沒有getspAvgData()方法將被暴露。
感謝 阿米特
對不起,我不知道。剛剛接受了我之前的所有問題。感謝您指出。 – FatherFigure 2011-02-08 23:53:47