您的位置:首页 > 编程语言 > Java开发

Java并发编程实践3.5-安全发布

2014-12-14 17:12 232 查看
1.法则:不可变对象可以在没有额外同步的情况下,安全的用于任意线程,甚至它们时亦不需要同步。

?如果final域指向可变对象,那么访问这些对象的状态时仍然需要同步。

2.如果一个对象不是不可变的,它就必须被安全地发布,通常发布线程与消费线程都必须同步化。

3.法则:为了安全的发布对象,对象的引用以及对象的状态必须同时对其他线程可见。一个正确创建的对象可以通过下列条件安全的发布:

l 通过静态初始化器初始化对象的引用;(由于Jvm内在的同步,该机制确保了以这种方式初始化的对象可以被安全地发布)

l 将它的引用存储到volatile域或AtomicReference;

l 将它的引用存储到正确创建的对象的final域中;?

l 或者将它的引用存储到由锁正确保护的域中。

4.良好实践。线程安全库中的容器提供了线程安全保证。

5.高效不可变对象(Effectively immutable ojbects)。一个对象在技术上不是不可变的,但是它的状态不会在发布后被修改,这样的对象称作高效不可变对象。

6.法则:任何线程都可以在没有额外的同步下安全的使用一个安全发布的高效不可变对象。

7.可变对象。.....

8.法则:发布对象的必要条件依赖于对象的可比性:

l 不可变对象可以通过任意机制发布;

l 高效不可变对象必须安全发布

l 可变对象必须安全发布,同时必须要线程安全或是被锁保护。

9.安全的共享对象。

在并发程序中,使用和共享对象的一些最有效的策略如下:

线程限制:一个线程限制的东西,通过限制在线程中,而被线程.....

共享只读:共享只读对象包括不可变对象与高效不可变对象。

(已经)线程安全共享:比如线程安全库中的容器

保护对象。比如锁保护。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: