Java 并发编程实战笔记(二)

发布和逸出

“发布”一个对象的意思是指,是对象能够在当前作用域之外的代码中使用。当某个不该发布的对象被发布时,这种情况就被称为逸出。

 

线程封闭

当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术就做线程封闭。

ad-hoc线程封闭:维护线程封闭性的职责完全由程序实现来承担。

栈封闭:只能通过局部变量才能访问对象。

 

不变性

满足同步需求的另一种方法就是使用不可变对象。

如果某个对象在被创建以后其状态就不能被修改,那么这个对象就称为不可变对象。不可变对象一定是线程安全的。

对象不可变性不等于将对象中所有的域都声明为final类型,即是对象中所有的域都是final类型的,这个对象也仍然是可变的,因为在final类型的域中可以保存对可变对象的引用。

对象不可变满足:

  • 对象创建以后其状态就不能修改
  • 对象的所有域都是final类型
  • 对象是正确创建的(在对象的创建期间,this引用没有逸出)

正如“除非需要更高的可见性,否则应将所有的域都声明为私有域是一个良好的习惯,”除非需要某个域可变,否则应将其声明为final域"也是一个良好的编程习惯

 

你可能感兴趣的:(Java,多线程)