別再羨慕c++ 11了,java馬上也有原子方法訪問變量了
在并行運算和多線程環境里,原子操作一個非常重要的功能. 比方說你要完成一個線程安全的增量數組,現在在Java里并不具備一個方法可以保證獲取數組的某項,然后加1,再放回去的原子操作。這樣的的功能在c++ 11里通過std::mutex
, std::recursive_mutex可以實現這個功能(http://en.wikipedia.org/wiki/C%2B%2B11#Threading_facilities)
現在Java也即將要增加變量和數組的原子操作了,Doung Lea和Paul Sandoz即將給我們帶來jep 193,增強型Volatiles (http://openjdk.java.net/jeps/193)
在這里我們即將引入VarHandle類,這個類就非常像jdk7引入的MethodHandle,使用方法是通過Lookup獲得對一個對象的VarHandle,之后可以使用原子操作方法對該對象進行操作。和MethodHandle一樣,這個類在library里屬于比較底層的類。它使用invokedynamic去鏈接去訪問的對象,通過虛擬機實現原子操作。
除此之外,java還有可能語法上支持直接生成訪問某個對象的VarHandle。
static final VarHandle VH_FOO_FIELD_I = Foo::i;
來自:http://blog.csdn.net/eagleyan/article/details/41745083
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!