线程封闭

把对象封装到一个线程里

  • Ad-hoc 线程封闭:程序控制实现,最糟糕,忽略
  • 堆栈封闭:局部变量,无并发问题(局部变量)
  • ThreadLocal 线程封闭: 特别好的封闭方法
线程不安全 线程安全
StringBuilder StringBuffer
SimpleDateFormat JodaTime
ArrayList,HashSet,HashMap等Collection

同步容器

线程不安全 同步容器类(不代表线程安全)
ArrayList Vector,Stack
HashMap HashTable(key,value不能为null)
List,Set,Map Collections.synchronizedXXXX(List,Set,Map)

在 iterator 和foreach 中的remove操作会出现
java.util.ConcurrentModificationException
改用 for循环

并发容器J.U.C
java.util.concurrent

容器 并发容器
ArrayList CopyOnWriteArrayList(建议在读多写少的场景使用)
HashSet,TreeSet CopyOnWriteArraySet,ConcurrentSkipListSet
HashMap,TreeMap ConcurrentHashMap,ConcurrentSkipListMap

安全共享策略
线程限制: 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改
共享只读:一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问,但是任何线程都不能修改它
线程安全对象: 一个线程安全的对象或者容器,在内部通过同步机制来保证线程安全,所以其他线程无需额外的同步就可以通过公共接口 随意访问它。
被守护对象:被守护对象只能通过获取特定的锁来访问

你可能感兴趣的:(线程封闭)