(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) {}
posted @ 2022-08-24 16:09  言思宁  阅读(205)  评论(0编辑  收藏  举报