什么是线程安全?
当多个线程访问一个对象,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。
线程不安全:
比如使用Set集合考虑交替调度,如get的时候不能同时set、或者进行额外同步,比如使用synchronized修饰;我们考虑了交替调度和做了额外同步,所以不能说它是线程安全的。
各种需要考虑线程安全的情况:
-
访问共享的变量或资源,会有并发风险,比如对象的属性、静态变量、共享缓存、数据库等
-
所有依赖时序的操作,即使每一步操作都是线程安全的,还是存在并发问题:read~ modify- write、 check-then-act
-
不同的数据之间存在捆绑关系的时候,比如ip和端口号
-
我们使用其他类的时候,如果对方没有声明自己是线程安全的
上篇:处理多线程子线程的异常UncaughtExceptionHandler
下篇:线程安全第一大类问题——运行结果出错