2013-05-07 54 views
0

我正在與InheritableThreadLocal合作,我知道在創建子代時,ThreadLocal將具有與父線程值相同的默認值。但是,如果父母的ThreadLocal值被修改,我怎麼能保持這一點?孩子的ThreadLocal可以用父母的ThreadLocal值修改嗎?

有沒有一種方法,當父母的ThreadLocal被修改時,他的所有子線程都會收到該修改?

編輯:我有一個布爾值在我的父線程中設置爲false。但是我有一個條件,當發生這種情況時,我將布爾值設置爲true,並且我還需要對所有由我的初始線程產生的子線程執行此操作。

+2

你可以在這裏發佈一些代碼嗎?我不知道你想達到什麼目的。 – Behnil 2013-05-07 07:52:23

+0

可繼承ThreadLocal是什麼意思?每個線程都有自己對ThreadLocal對象中變量的引用。線程是否從另一個線程產生並不重要。 「子」線程不會繼承ThreadLocal變量。 – Behnil 2013-05-07 08:08:20

+0

我正在使用'InheritableThreadLocal',這樣子線程就會繼承父類的值。 – dianap 2013-05-07 08:11:48

回答

1

InheritableThreadLocal只有幫助設置孩子的初始值。它不提供任何其他同步。您必須使用正常的線程同步方法來傳播值。這就是說,如果你希望所有的孩子在開始時和父母改變時都具有相同的父母價值,那你爲什麼要給他們所有需要同步的獨立對象?爲什麼不給孩子一個參考父母,讓他們都檢查父母的價值?

-1

我用可繼承ThreadLocal工作,我知道,創建兒童時ThreadLocal將有默認值相同父線程值。

如果它被繼承,它是同一個對象。一切都是一樣的。

但是,當父母的ThreadLocal值修改時,我該如何維護這個?

保持什麼?這裏只有一個ThreadLocal對象。然而它的表現就是它的表現。

+0

通過維護,我指的是保持相同的值從父threadlocal到子線程本地,即使父母的線程本地值已更改。 據我所知,子線程是使用父線程的本地值創建的,它們不是同一個對象(父線程本地值和子線程本地值) – dianap 2013-05-07 08:07:50

+0

這沒什麼意義。如果'ThreadLocal'被繼承,則只有其中一個。沒有「父母」和「孩子」。 – EJP 2013-05-07 08:24:31

+0

但是現在有人很好地編輯了你的問題,現在清楚你正在使用'InheritableThreadLocal';但我在這裏沒有看到[Javadoc](http://docs.oracle.com/javase/7/docs/api/java/lang/InheritableThreadLocal.html)中沒有回答的任何內容。 – EJP 2013-05-08 01:38:48