【发布时间】:2014-03-21 13:28:05
【问题描述】:
我认为我在运行多线程 Java 程序时遇到了竞争条件。
这是一种置换算法,我想通过运行具有不同值的多个实例来加速该算法。所以我在 Main 类中启动线程:
Runnable[] mcl = new MCL[n1];
for (int thread_id = 0; thread_id < n1; thread_id ++)
{
mcl[thread_id] = new MCL(thread_id);
new Thread(mcl[thread_id]).start();
Thread.sleep(100);
}
它运行那些 MCL 类实例。
再次,我认为线程正在访问 MCL 类变量的相同内存空间,对吗?如果是这样,我该如何解决?
我正在尝试制作所有变量数组,其中一个维度与线程的 Id 相关,以便每个线程写入不同的索引。这是一个好的解决方案吗?:
int[] foo = new foo[thread_id];
【问题讨论】:
-
不,这不是一个好的解决方案。这也不是一个解决方案。
-
据我所知,您正在运行的那些线程不共享任何公共对象。如果这是真的,您不必同步任何东西(只要每个线程都在他自己的对象上工作)。你能给我们一些你的
MCL-class的代码吗?它有任何静态属性吗? -
你必须向我们展示 MCL 类。您上传的部分不包含任何竞态条件
-
为什么不使用
Executor而不是裸线程? -
我猜对了!
标签: java multithreading concurrency race-condition