如何使程序等到定时器线程完成才继续呢?

时间:2019-10-19 00:34:02

标签: java multithreading

我正在做一个学习Java的小程序,我想打印一些东西,等待几秒钟(显示为...),然后继续执行该程序。我通过使用TimerTimerTask来做到这一点。我想知道如何使程序的执行等到我的计时器线程结束。

我尝试在某些地方添加timer.wait(),但是它不起作用。

public class Main
{
    public static void main(String[] args)
    {
        System.out.println("text1");
        clock currentClock = new clock();
        currentClock.run();
        // i want the program to stop until this is over, adding currentClock.wait(); doesnt work
        System.out.println("text2");
    }
}

class clockHelper extends TimerTask
{ // printing class, called by clock class

    int actual = 0;

    public void run()
    {
        if (actual < 3)
        {
            System.out.println(".");
            actual++;
        } else
        {
            cancel();
        }
    }
}

class clock
{ // called by main class
    public static void run()
    {

        Timer watch = new Timer();
        TimerTask timer2 = new clockHelper();
        watch.schedule(timer2, 1000, 500);
        // adding watch.wait(); doesn't work, i can also stop it here and it should work fine
    }
}

这是我得到的错误:java.lang.IllegalMonitorStateException

我想要的结果是打印此: “文本”。 。 。 “ text2”

如果我删除了wait(这会导致错误),则会显示: “ text1”“ text2”。 。

提前感谢您提供任何信息。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

public class Main
{
    public static void main(String[] args) throws InterruptedException
    {
        System.out.println("text1");
        for (int i = 0; i < 3; i++) {
            System.out.print(".");
            Thread.sleep(1000);
        }
        System.out.println();
        System.out.println("text2");
    }
}