2017-05-21 35 views
0

Javascript有Transferable Objects用於將對象轉移到web worker而不爲了線程安全而進行復制。一旦網絡工作者擁有它,應用就不再需要引用該對象,因此不需要複製。換句話說,參考資料是由工人或應用程序持有,但不是同時持有。 Java中是否有類似的機制?java是否有可轉移對象(多線程概念)

+0

不,但我們有鎖。 :)如果你的對象實現了某種接口,你也可以創建一個代理對象。 – biziclop

回答

2

不,根據定義,java沒有Transferable對象,因爲JVM中沒有任何東西可以阻止兩個引用值引用同一個實例。

但是,存在各種各樣的構建器(參見Builder Pattern, Wikipedia),它們可用於構建對象,然後構建一個不可變的實例,然後通過不可變的方式實現線程安全。最着名的建築師是StringBuilder。我不知道有哪些java開箱即用的構建器,但我知道有許多庫都有構建器,例如Guava (Wikipedia),請參閱ImmutableMap.Builder<K,V>Google guava documentation)。

+0

我認爲引入不可變對象作爲構建者的副產品是誤導性的。當然,一些不可變的對象需要構建者,但是很多其他人(比如'String','Integer'等)則不需要。 –

+0

另外,爲什麼''? –

+0

@AndyTurner'Integer'當然不需要構建器,但是你怎麼能說'String'不是?那麼'StringBuilder'的目的是什麼? –