序言:想用好多线程,只知道多线程是如何工作的还是不够,更多的我们应该知道如何多线程如何实现 “线程安全”
线程安全定义:
代码封装了所有必要的正确性保障手段(如互斥同步等),令调用者无需关心多线程问题,更无需采取任何措施来保证多线程的调用。
线程安全会造成的问题:
多个线程同时读写一个共享资源并没有任何同步措施时,会导致脏数据或者其他不可见的问题。
共享数据(主内存中可操作的数据)的 “安全程度”由强至弱排序:
1.不可变 :不可变的对象一定是线程安全的,无论是对象方法实现还是方法的调用者都不需要采取任何线程安全措施
例如:
final关键字修饰的基本类型 (当对象被创建出来 对外部的可见转台永远不会改变,也不会出现在多个线程之间不一致的结果)
包括final修饰的类等
(1)String 类:(final修饰的 char [])
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
...
}