我有两个实现Runnable接口的对象。
假设我有 Thread_1 和 Thread_2 对象。
Thread_1 具有全局变量 myVariable; 和方法 myMethod(),它使用 myVariable 变量。
Thread_2 包含 Thread_1
类型的变量所以这是场景:
两个主题: Thread_1 和 Thread_2 正在运行。
如果 Thread_1 当前正在使用 myMethod()(使用 myVariable ),同时 Thread_2 正在使用 Thread_1 的 myVariable 通过 Thread_1 (不调用 myMethod()方法)我应该同步<是不是em> myVaribale 变量?
答案 0 :(得分:1)
如果使用,则synchronize
表示写入内存。你可能也想考虑原子。
此外,您不应将变量和方法放在Thread
中。仅当您要添加特定于线程的功能并将其余部分留给Thread
或构成系统的任何其他类时,才会对子类Runnable
进行分类。
答案 1 :(得分:1)
如果Thread_1当前正在使用myMethod()(使用myVariable),同时Thread_2正在使用Thread_1的myVariable - &gt;所以他们都用它?一个直接和一个通过方法?
在这种情况下,变量在线程之间共享,您需要确保读/写是原子的。 make是volatile,或者是它的AtomicXXX类,或者使用显式锁。
P.S。一个线程是另一个线程的成员?有趣的设计
答案 2 :(得分:1)
“我应该同步myVaribale变量吗?”
它实际上取决于尝试使用您的代码和变量类型(如果它是类或基本类型)进行存档。同步必须是威胁作为一个本地和特定的问题,大多数时候你没有标准的程序可以使用。
我可以告诉你的是,这个全局变量myVariable
应该是volatile
,以确保两个线程都可以看到所有修改。
答案 3 :(得分:0)
访问myVariable并不重要。只要您从多个线程访问它(任何变量),您必须确保其线程安全,简单。您可以根据您要实现的目标,使用volatile,AtomicReference,锁定或同步这些方法。