比赛条件非常棘手,因为我不得不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 (或类似的东西)之类的线程安全集合将数据从一个线程传递到另一个线程。

09-10 08:59
查看更多