线程安全
多线程访问时,采用加锁(synchronized)机制。
当多线程更改读取数据时,当一个子线程读取数据时,其他线程读改该数据时转为阻塞状态;
非线程安全
不提供数据访问保护,多线程可能会出现脏数据的问题。
Java中的线程安全与非线程安全
StringBuffer和StringBuilder
- StringBuffer是线程安全
- StringBuilder是非线程安全
ArrayList和Vector
- ArrayList是非线程安全
- LinkedList是非线程安全
- Vector是线程安全
HashMap和HashTable
- HashMap是非线程安全
- HashTable是线程安全
使用场景
多线程操作同一个对象
使用线程安全来确保数据安全,避免脏数据。
单线程/多线程操作不同对象
使用非线程安全,不加锁,效率高。