Java 从非线程安全类实例化线程安全类
在非线程安全的类中,必须避免使用类变量,因为它们可以由不同的线程端执行上下文共享。 但是,如果实例化一个本身具有类变量的外部类,这些类是否是线程安全的 在本例中,线程之间共享计数器变量是否存在风险Java 从非线程安全类实例化线程安全类,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,在非线程安全的类中,必须避免使用类变量,因为它们可以由不同的线程端执行上下文共享。 但是,如果实例化一个本身具有类变量的外部类,这些类是否是线程安全的 在本例中,线程之间共享计数器变量是否存在风险 class MyNotThreadSafeClass() { private integer sharedvariable; public void callAnOtherClass() { myClass o = new myClass(); System.
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
传递给另一个线程。因此,任何其他线程都无法访问此实例
一般的模式是:如果在多个线程之间共享一个实例,那么需要进行某种同步
如果您不共享一个实例,那么是否有更多线程并不重要。您的代码包含许多错误。一个类是线程安全的还是非线程安全的,并不取决于它是如何实例化的。你的myClass示例不适合你的问题,它没有类变量。它也没有显式地显示任何线程。非常感谢你的快速回答M.Digulla。