0

我有两个实现 Runnable 接口的对象。

可以说我有Thread_1Thread_2对象。

Thread_1有全局变量myVariable;和使用myVariable变量的方法myMethod() 。

Thread_2具有Thread_1类型的变量

所以这里是场景:

两个线程:Thread_1Thread_2都在运行。

如果Thread_1当前正在使用myMethod()(它使用myVariable),同时Thread_2正在使用Thread_1myVariableThread_1(不调用myMethod()方法),我是否应该同步myVaribale变量?

4

4 回答 4

1

synchronize如果使用意味着写入内存,您应该这样做。您可能也想考虑原子。

另外,你不应该把你的变量和方法放在Threads. 仅Thread当您想添加特定于线程的功能并将其余部分留给Runnables 或组成您的系统的任何其他类时才子类化。

于 2013-04-19T13:10:48.250 回答
1

“我是否应该同步 myVaribale 变量?”

这实际上取决于尝试使用您的代码归档的内容和变量的类型(如果它是类或原始类型)。同步必须是一个本地和特定问题的威胁,大多数情况下您没有使用标准程序。

我可以告诉你的是,这个全局变量 ,myVariable应该是volatile,以确保两个线程都可以看到所有修改。

于 2013-04-19T13:30:23.333 回答
1

如果 Thread_1 当前正在使用 myMethod()(它使用 myVariable)并且同时 Thread_2 正在使用 Thread_1 的 myVariable --> 那么他们都使用它吗?一个是直接的,一个是通过方法的?

在这种情况下,变量在线程之间共享,您需要确保读/写发生原子。make 要么是 volatile,要么是它的 AtomicXXX 类,或者使用显式锁。

PS一个线程是另一个线程的成员?有趣的设计

于 2013-04-19T13:12:48.703 回答
0

您如何访问 myVariable 并不重要。只要您从多个线程访问它(任何变量),您就必须确保其线程安全、简单。您可以根据您要实现的目标使用 volatile、AtomicReference、lock 或 synchronize,这些方法中的任何一种。

于 2014-02-27T16:30:26.457 回答