java线程安全与不安全的理解

存在成员变量(全局变量)的类用于多线程时是不安全的,不安全体现在这个成员变量可能发生非原子性的操作,而变量定义在方法内也就是局部变量是线程安全的。

想想在使用struts1时,不推荐创建成员变量,因为action是单例的,如果创建了成员变量,就会存在线程不安全的隐患,而struts2是每一次请求都会创建一个action,就不用考虑线程安全的问题。

比如把类A用于多线程,在多个线程之间共享了A类的一个实例,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线程栈),工作内存存储了主内存a对象的一个副本,当线程操作a对象时,首先从主内存复制a对象到工作内存中,再进行操作,比如更新了成员变量的值,最后用工作内存中的a刷新主内存的a。