线程安全

146 阅读1分钟

什么是线程安全

  • 例1
public class Counter {
   private int num = 10;

   public int getNum() {
       return num++;
   }
}

例1就是典型的非线程安全的对象,当多个线程访问Counter对象的getNum方法时,在特殊的时序下,如果两个线程同时读取到num的值,则两个线程可能返回的结果都为11。

我们通常会说一个类也就是一个对象是线程安全的,可以看出,线程安全针对的是对象,即线程中该对象实例调用方法是否为线程安全。

编写的代码线程安全的核心是管理共享的,可变的变量,线程是可以共享统一进程下的资源的,如果共享资源的访问不能得到控制,多个线程在访问时改变了资源的状态,可能就得不到预期的结果

无状态对象与有状态对象

在线程安全中,无状态对象(statelss bean)是一个十分重要的概念,是指不能保存和修改数据,直接由线程访问。与之对应的是有状态对象(state bean),java中POJO对象就是典型的有状态对象。