代码线程安全是指:
当多个线程同时行某一个代码块时,不会引起竞态条件,也不会导致数据不一致等情况。那么这段代码就是线程安全的。
在多线程中资源的共享一定要小心,因为不同的资源它的线程安全性都不一样,错误的使用容易引起线程的不安全。
在这里有一个规则称为 ”线程控制逃逸规则“ ,是指:
如果一个资源的创建,使用,销毁都在同一个线程内完成, 且永远不会脱离该线程的控制,则该资源的使用就是线程安全的。
线程安全需要区分的资源:
1、局部变量
局部变量存在于方法中,他的生命周期就是从在方法内的定义出开始,到方法执行结束时被销毁。它存在于每一个线程栈中,每一个线程栈中的数据是独立的。因此局部变量是线程安全的。
2、局部对象的引用
局部对象的引用,它是一个引用,声明范围也是从方法的定义出开始,在方法结束时被销毁,同样也是被存储与线程栈中。但是需要注意,所引用的对象实体是存放在堆栈区域的,因此是否线程安全需要注意。
这是需要用到”线程控制逃逸规则“。如果说这个引用的线程的声明周期也是在线程使用的方法范围内,或者是作为参数传递进来的,其他线程并不会访问到这个对象,此时就是线程安全的。否则不是线程安全的。
3、对象成员
与上线的局部对象的引用类似。但是对象成员是属于一个类的数据成员,因此一般情况下是被多个线程所同时使用的,因此他不是线程安全的,在有对 对象成员操作的地方一定要同步,保护线程的安全。