局部变量是线程安全的。因为局部变量是声明在方法中的变量,方法是放在JVM内存中的方法区的,为方法分配内存的时候并不会为局部变量分配内存,只有在有线程在调用方法的时候才会为局部变量分配内存,并且局部变量是分配在栈上的,栈空间是线程私有的,所以,每当有线程执行方法,都会为其在栈上分配一个局部变量的空间。所以局部变量是属于线程的,是线程安全的。
实例变量的线程安全要分两种情况来说。对于单例模式下对象的实例变量,是非线程安全的。因为在单例模式下,所有线程操作的都是同一个对象,同一个实例变量。所以是不安全的。对于普通创建的对象下的实例变量,每个线程对应一个对象,对象与对象之间的实例变量的修改互不影响,所以是线程安全的。
静态变量是属于类的,存放在方法区,所有线程操作的是同一个,是非线程安全的。