2014-05-24 83 views
2

緩存並重新使用java.lang.invoke.MethodHandle的實例是否安全?MethodHandle和線程安全

我檢查了JavaDoc並找不到有關線程安全的任何信息。

回答

1

是的,在線程之間共享MethodHandle對象應該是絕對安全的。

注意API documentation說下面這件事:

方法處理是不可變的,並沒有可見狀態。當然,它們可以綁定到顯示狀態的基礎方法或數據。對於Java內存模型,任何方法句柄的行爲就好像其所有(內部)字段都是最終變量。這意味着應用程序可見的任何方法句柄將始終完全形成。即使方法句柄通過數據競賽中的共享變量發佈,情況也是如此。

1

MethodHandle是代碼調用的抽象,而不是代碼後面的狀態管理。因此,線程安全的推理是依賴於實際執行的目標方法,而不是對象本身。