【问题标题】:Instanciating a thread-safe class from a non thread-safe class从非线程安全类实例化线程安全类
【发布时间】:2014-06-24 12:10:16
【问题描述】:

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

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

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

谢谢你的想法(这个线程安全主题中的文档不是很清楚)。

【问题讨论】:

  • 您的代码包含许多错误。一个类在设计上是线程安全的还是不是线程安全的,而不取决于它是如何实例化的。
  • 您的 myClass 示例不适合您的问题,它没有类变量。
  • 它也没有明确显示任何线程。

标签: java multithreading thread-safety


【解决方案1】:

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

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

如果你不共享一个实例,是否有更多的线程也没关系。

【讨论】:

  • 非常感谢 M. Digulla 的快速答复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
相关资源
最近更新 更多