在我的小應用程序中,我有兩個類的線程 - 基本上是作者和讀者。可以將多個閱讀器分配給一個作者。作者通過寫入他們的chunkBuffer
變量來與讀者進行交互。現在在Java中共享一個ThreadLocal變量
,我不能完全總結我在這裏的線程安全問題頭:如果我不存儲在一個靜態變量ThreadLocal
的chunkBuffer
,所有讀者將共享一個chunkBuffer,這是不好的。但是如果我確實將chunkBuffer存儲在一個靜態的ThreadLocal
中,作爲獨立線程的作者將獲得它自己的chunkBuffer副本並將繼續寫入它,而它寫入的數據都不會到達讀者。你能向我解釋這裏有什麼問題嗎?非常感謝你。
編輯換句話說,有沒有方法來創建一個領域,這將是一個線程子類(如ThreadLocal的)的每一個實例是唯一的,但可以從需求的其他線程訪問?
爲什麼所有讀者都不能共享一個緩衝區? – axtavt 2011-04-27 10:36:03
由於閱讀器可能需要刪除緩衝區中的一些幀,具體取決於閱讀器線程和遠程客戶端之間的連接速度。所以實際上讀者也可以寫入緩衝區,因爲他們可以從中刪除內容。 – dpq 2011-04-27 10:38:26
如果緩衝區寫入正確,我不明白爲什麼寫入不能到達讀取器。其實它不清楚爲什麼你使用ThreadLocal,你應該能夠避免它。 – 2011-04-27 10:39:06