Java - 无法使线程一个接一个地执行

时间:2016-03-21 04:25:55

标签: java multithreading

我对使用线程的想法很新,并且对它们有很多麻烦。方法调用displayComplexStimulus(phase1Trial.getComplexStimulus())在屏幕上显示一组包含图像的jlabels(phase1CompoundLabels)。

我要做的是让那组jlabel显示两秒然后消失。当我不包含实例化的代码,运行并加入compoundThread线程和alternativesThread线程时,图像显示正常。但是,当我包含实例化的代码,运行并加入两个线程时,图像永远不会出现,当我试图让jlabels在消失之前出现两秒钟时。

我是否正确的问题是在Thread开始执行之前,alternativesThread还没有等到compoundThread完成执行?鉴于我加入了这两个主题,我很困惑为什么会这样。如果有人可以帮助我理解为什么我的代码没有按预期工作,我们将不胜感激。

public void phase1() {

    while (totalNoOfPhase1Trials > 399) {
        Phase1Trial phase1Trial = new Phase1Trial(numberOfElements, elementColors);

        displayComplexStimulus(phase1Trial.getComplexStimulus());
        validate();


        Thread compoundThread = new Thread(new Runnable() {

            public void run() {
                try {
                    Thread.currentThread().sleep(2000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    Thread.currentThread().interrupt();
                }
            }

        });

        Thread alternativesThread = new Thread(new Runnable() {
            public void run() {

                for (int i = 0; i < numberOfElements; i++) {
                    remove(phase1CompoundLabels[i]);
                }
                validate();
            }
        });

        compoundThread.start();
        alternativesThread.start();


        try {
            compoundThread.join();
            alternativesThread.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        totalNoOfPhase1Trials--;
    }
}

1 个答案:

答案 0 :(得分:0)

如果你想在alternativesThread完成后运行compoundThread,那么请在alternativesThread.start();的run()方法中写compoundThread所以它会等到处理compoundThread完成。