【发布时间】:2017-11-12 14:33:53
【问题描述】:
在另一个帖子中我遇到了这个问题,所以我必须把它作为一个简单而集中的问题放在这里。
void method(){
Machine machine = new Machine();
...
}
class Machine{
private static Tool tool = new Tool();
...
}
虽然 Machine 是 method() 中的局部变量,但它仍然是线程不安全的,因为 Machine 有一个静态实例变量“tool”,它可能是潜在的线程不安全的,因为所有线程都将共享这个“工具”对象,因为它是静态的。
因此,如果 Machine 通过任何方式本身都是线程安全的,那么可以安全地声明“局部变量机器”是线程安全的。否则,即使 'machine' 是局部变量,它也不安全。
这种理解正确吗?
【问题讨论】:
-
“虽然 Machine 是方法中的局部变量” - 它不是,它是一个类,是 Class 类型的对象,并且驻留在堆中的某个位置。 “machine”确实是一个局部变量,但它只包含对使用表达式“new Machine()”创建的 Machine 类型对象的引用,而对象本身又像任何其他对象一样位于堆中。
标签: java multithreading