目录
CyclicBarrier和CountDownLatch的区别
线程安全
什么是线程安全
程序执行前和执行后的数据都是一致的,那么就是线程安全的。线程安全有几个级别:
不可变,像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,所以这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用。
绝对线程安全,不管运行时环境如何,调用者都不需要额外的同步措施。要做到这一点通常需要付出许多额外的代价,Java中标注自己是线程安全的类,实际上绝大多数都不是线程安全的,不过绝对线程安全的类,Java中也有,比方说CopyOnWriteArrayList、CopyOnWriteArraySet。
相对线程安全,相对线程安全也就是通常所说的线程安全,像Vector这种,add、remove方法都是原子操作,不会被打断但也仅限于此