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.安全的共享对象。
在并发程序中,使用和共享对象的一些最有效的策略如下:
线程限制:一个线程限制的东西,通过限制在线程中,而被线程.....
共享只读:共享只读对象包括不可变对象与高效不可变对象。
(已经)线程安全共享:比如线程安全库中的容器
保护对象。比如锁保护。
?如果final域指向可变对象,那么访问这些对象的状态时仍然需要同步。
2.如果一个对象不是不可变的,它就必须被安全地发布,通常发布线程与消费线程都必须同步化。
3.法则:为了安全的发布对象,对象的引用以及对象的状态必须同时对其他线程可见。一个正确创建的对象可以通过下列条件安全的发布:
l 通过静态初始化器初始化对象的引用;(由于Jvm内在的同步,该机制确保了以这种方式初始化的对象可以被安全地发布)
l 将它的引用存储到volatile域或AtomicReference;
l 将它的引用存储到正确创建的对象的final域中;?
l 或者将它的引用存储到由锁正确保护的域中。
4.良好实践。线程安全库中的容器提供了线程安全保证。
5.高效不可变对象(Effectively immutable ojbects)。一个对象在技术上不是不可变的,但是它的状态不会在发布后被修改,这样的对象称作高效不可变对象。
6.法则:任何线程都可以在没有额外的同步下安全的使用一个安全发布的高效不可变对象。
7.可变对象。.....
8.法则:发布对象的必要条件依赖于对象的可比性:
l 不可变对象可以通过任意机制发布;
l 高效不可变对象必须安全发布
l 可变对象必须安全发布,同时必须要线程安全或是被锁保护。
9.安全的共享对象。
在并发程序中,使用和共享对象的一些最有效的策略如下:
线程限制:一个线程限制的东西,通过限制在线程中,而被线程.....
共享只读:共享只读对象包括不可变对象与高效不可变对象。
(已经)线程安全共享:比如线程安全库中的容器
保护对象。比如锁保护。
相关文章推荐
- java并发编程实践之安全发布和逸出
- java并发编程实践之安全发布和逸出
- Java 并发编程实践基础 读书笔记: 第二章 构建线程安全应用程序
- Java并发编程实践笔记(五)——chapter3(发布溢出,线程封闭)
- Java并发编程实践笔记之—发布和逸出(Publication and Escape)
- java并发编程实践笔记
- java并发编程实践笔记
- Java并发编程实践-第十三章-Explicit Locks
- JAVA并发编程实践 原子性
- java并发编程实践-性能和可伸缩性
- java并发编程实践笔记
- java多线程与并发之java并发编程实践(七)
- Java并发编程实践-第三章-对象的共享
- JAVA并发编程实践- 线程的优点
- java多线程与并发之java并发编程实践(一)
- Java并发编程实践-第二章-线程安全
- java并发编程实践笔记
- java多线程与并发之java并发编程实践(三)
- java多线程与并发之java并发编程实践(四)
- java并发编程实践 ThreadLocal