Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程安全类是否可以包含任何公共实例字段?_Java_Multithreading_Thread Safety - Fatal编程技术网

Java 线程安全类是否可以包含任何公共实例字段?

Java 线程安全类是否可以包含任何公共实例字段?,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,线程安全类是否可以包含任何公共实例字段?访问修饰符在线程安全上下文中是不相关的。当然,在线程安全类中可以有公共字段,您需要问自己的问题是:这是否符合my/a设计模式,以及这样做可以实现什么。当人们说C类是“线程安全”时,它们通常意味着,多个线程对类的单个实例执行的操作的交错不会使实例处于无效状态。(但正如Marko所说,这不是一个正式商定的定义。)那么,类实例的状态是什么?哪些州有效,哪些州无效?是否可以通过更新一个公共字段将有效状态更改为无效状态 如果有任何方法可以通过更新公共字段将状态从有效

线程安全类是否可以包含任何公共实例字段?

访问修饰符在线程安全上下文中是不相关的。当然,在线程安全类中可以有公共字段,您需要问自己的问题是:这是否符合my/a设计模式,以及这样做可以实现什么。

当人们说C类是“线程安全”时,它们通常意味着,多个线程对类的单个实例执行的操作的交错不会使实例处于无效状态。(但正如Marko所说,这不是一个正式商定的定义。)那么,类实例的状态是什么?哪些州有效,哪些州无效?是否可以通过更新一个公共字段将有效状态更改为无效状态


如果有任何方法可以通过更新公共字段将状态从有效更改为无效,则不能说该类通常是线程安全的,但如果应用程序中从未发生过这种情况,则该类在应用程序的有限上下文中可能是线程安全的。

当然,为什么不?无论如何,线程安全并不是一个正式的概念。你的问题太笼统和模糊了。向观众展示你的代码,我们会看看它是否是线程安全的。没有代码,没有人说它是否是“线程安全的”——这取决于实现和使用。不,这不是无关紧要的。如果您只有私有的不可变成员,那么从所有线程调用的所有方法将看到这些成员处于相同的状态。如果任何成员是可变的(例如可变的
列表
),或者对其的访问是公共的,您永远无法确定在处理这些值时这些值是否会更改。最好的例子是
ConcurrentModificationException