Java Thread访问另一个Thread

时间:2013-04-19 13:06:08

标签: java multithreading synchronization thread-safety thread-synchronization

我有两个实现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 变量?

4 个答案:

答案 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,锁定或同步这些方法。