我想知道多个线程如何访问同一个变量。如果变量是非静态的并且每个线程都是它自己的线程对象,那么如何访问同一个变量呢?例如,假设我有一个找到2D数组最大值的函数。如果每个线程找到一行的最大值,并且每个线程也维护该行的本地最大值并将该本地最大值与共享最大值进行比较并相应地更新共享最大值,那么如果您有不同的线程对象,您将如何访问共享最大值?
例如,在此代码中我有
for(int i=0; i<input.length; i++){
rowArray = input[i];
teste r1 = new teste(rowArray);
runnables.add(r1);
}
这将调用实现runnable的teste类,并使用该行的一行对其进行实例化。然后它将它添加到runnables的arraylist。现在,每个teste对象都有自己的变量和引用,那么如果要为每一行创建不同的teste对象,您将如何“共享”它们?基本上我想通过引用传递而不是值&gt;,&gt;
答案 0 :(得分:1)
线程需要有一种方法来引用示例中相同的“共享最大值”。
有两种方法:
最大值为静态变量(可疑)
在创建线程时将“maximum”对象作为参数传递给您的线程
请注意,当多个线程访问同一个变量时,您必须采取步骤来同步对它的访问(因此两个线程不会同时修改它。
一种方法是使用synchronized
statemtned
答案 1 :(得分:0)
Java提供volatile modifier for variables,它保证每个线程将读取其当前值而不是线程缓存值。