比赛条件非常棘手,因为我不得不learn。
public class MyThread extends Thread {
private volatile boolean active;
private volatile Job job;
public MyThread() {
active = true;
job = null;
}
public void run() {
while (isActive()) {
if( job != null) {
doIt();
}
}
}
public void finish() {
this.active = false;
}
public boolean isActive() {
return active;
}
private void doIt() {
int c = job.a + job.b;
job.result(c);
job = null;
}
public call processJob( Job j ) {
this.job = j;
}
}
如果我使用少量线程,则此方法可以正常工作,但同时运行大量线程时,则会遇到问题。我所说的问题是某些线程没有调用
job.result(c);
,尽管它们都没有停止。我认为发生这种情况是因为,如果通过
processJob(j)
从其他进程调用时,我无法正确添加作业。 问题:我应该如何正确地做到这一点? 最佳答案
在我看来,您好像有一个consumer / producer设计。
我建议您使用诸如 BlockingQueue
(或类似的东西)之类的线程安全集合将数据从一个线程传递到另一个线程。