↓ 跳过正文

Java线程安全和非线程安全

正能量 2 分钟阅读 更新于 2026-10-18

解释 Java 集合线程安全讨论中,共享对象与单线程对象的区别。

Java 编程:原站配图。
Java线程安全和非线程安全配图

非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。

线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。

所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

非线程安全!=不安全

有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。

非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。比如最上面那个模拟,就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。

如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。

补充阅读
#

解释 Java 集合线程安全讨论中,共享对象与单线程对象的区别。

如何理解与使用
#

关键是多个线程是否访问同一个可变对象,而不只是程序是否使用多线程。线程私有的集合与共享集合需要不同的并发设计。

验证与边界
#

线程安全不只靠 synchronized,也不能认为换成 Vector 就自动保证“先检查再修改”等复合操作原子性。围绕实际共享状态设计并发测试。