(4.3) 线程安全类
4.3 线程安全类
线程安全类:String、Integer、StringBuffer、Random、Vector、Hashtable、java.util.concurrent(JUC)包下的类
注意:它们每个方法是原子的,但是多个方法的组合不是原子的。
String和Integer
String和Integer是不可变类,即它们属性的状态(值)不可变,因此它们都是线程安全的。
String的replace、subString方法,是创建一个新的String,String本身是不可变的。
public class Immutable {
private int value = 0;
public Immutable(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public Immutable add(int v) {
return new Immutable(this.value + v);
}
}
为什么String是不可变的,还要设计成final?
防止子类继承String,破坏父类方法的行为,将线程安全的类编程线程不安全的类。
开放封闭原则:软件实体应该是可扩展的,而不可修改的,可以对现有代码进行扩展,以适应新的情况。
Hashtable
public synchronized V put(K key, V value) {}
public synchronized V get(Object key) {}
public synchronized V remove(Object key) {}