从非线程安全的类中实例化一个线程安全的类

时间:2014-06-24 12:10:17

标签: java multithreading thread-safety

在非线程安全的类中,必须避免使用类变量,因为它们可以由执行上下文的不同线程共享。 但是如果你实现一个本身有类变量的外部类,那么它们是否是线程安全的?

在这个例子中,在线程之间共享计数器变量是否存在任何风险?

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++); }  
}

如果您有任何想法,请相信(文档在此线程安全主题中不是很清楚)。

1 个答案:

答案 0 :(得分:1)

这是有效的,因为你永远不会将o传递给另一个线程。因此,没有其他线程可以访问此实例。

一般模式是:如果您在多个线程之间共享一个实例,那么您需要进行某种同步。

如果您不共享实例,那么是否有更多线程无关紧要。