【定义】:无论是在多线程还是在单线程下执行结果永远一致,就是线程安全的
【特点】:
- 不可变
例如String、Integer、Long这种类,都是final修饰的,任何线程都无法改变其值,除非新建,所以不可变对象可以直接在多线程环境下使用。 - 绝对线程安全
例如CopyOnWriteArrayList(ArrayList线程安全变体)、CopyOnWriteArraySet(java.util.AbstractSet的子类) - 相对线程安全
例如Vector,其add、remove方法都是原子操作,如果有个线程正在遍历此
Vector,同时有个线程在操作此Vector,多数情况下都会出现ConcurrentModificationException,也就是fail-fast机制。 - 线程不安全
例如ArrayList、LinkedList、HashMap