构造过程中,另一个常见错误是,在构造器启动一个线程.此时,无论是显式创建(传给构造器)或隐式(内部类),this引用都会被创建的线程共享.在对象尚未完全构造之前,新的线程就可以看见它.在构造器创建线程并无错误...在JMM中,final域能确保初始化过程的安全性,从而可以无限制地访问不可变对象,并在共享这些对象时无须同步.
5 安全发布
任何线程都可在无额外同步情况下安全访问不可变对象,即使在发布时没有使用同步....synchronizedSet中,可以将该对象安全地发布到任何从这些容器中访问该对象的线程
通过将某个对象放入BlockingQueue或者ConcurrentLinkedQueue中,可以将该对象安全地发布到任何从这些队列中访问该对象的线程...安全的共享对象
实用策略:
线程封闭 线程封闭的对象只能由一个线程拥有,对象被封闭在该线程中,并且只能由这个线程修改
只读共享 在没有额外同步的情况下,共享的只读对象可以由多个线程并发访问,但任何线程都不能修改它....共享的只读对象包括不可变对象和事实不可变对象
线程安全共享 线程安全的对象在其内部实现同步,因此多个线程可以通过对象的公共接口来进行访问而不需要进一步的同步
保护对象 被保护的对象只能通过持有特定的锁来访问