在非线程安全的类中,您必须避免使用类变量,因为它们可以由不同线程结束执行上下文共享。 但是,如果您实例化一个本身具有类变量的外部类,它们是线程安全的吗?
在此示例中,在线程之间共享计数器变量是否存在风险?
class MyNotThreadSafeClass()
{
private integer sharedvariable;
public void callAnOtherClass()
{
myClass o = new myClass();
System.out.println(o.increment(counter));
}
}
class myClass()
{
private integer counter;
public void increment() { return(counter++); }
}
如果您有一个想法,谢谢(这个线程安全主题的文档不是很清楚)。
最佳答案
这是有效的,因为您从未将 o
传递给另一个线程。因此没有其他线程可以访问此实例。
一般模式是:如果您在多个线程之间共享一个实例,那么您需要进行某种同步。
如果不共享实例,线程再多也没关系。
关于java - 从非线程安全类实例化线程安全类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386301/