在非线程安全的类中,必须避免使用类变量,因为它们可以由执行上下文的不同线程共享。 但是如果你实现一个本身有类变量的外部类,那么它们是否是线程安全的?
在这个例子中,在线程之间共享计数器变量是否存在任何风险?
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++); }
}
如果您有任何想法,请相信(文档在此线程安全主题中不是很清楚)。
答案 0 :(得分:1)
这是有效的,因为你永远不会将o
传递给另一个线程。因此,没有其他线程可以访问此实例。
一般模式是:如果您在多个线程之间共享一个实例,那么您需要进行某种同步。
如果您不共享实例,那么是否有更多线程无关紧要。