线程休眠,并在收到输入时继续线程

时间:2014-06-15 21:01:36

标签: java

我的程序遇到问题,试图睡觉并且没有睡觉。

现在我正在运行2线程,标准线程检查TCP设备的输入(两个设备已连接),另一个线程处理来自键盘的输入。

我有一个场景,我将停止其中一个线程10秒,以便它可以接收命令。

到目前为止的代码:

else if ((inputReceived.startsWith("RM20"))) {
    RM20Received = "Yes";
    showMenu();

    display = (inputReceived.substring(2,inputReceived.length()));

    if (scaleInput == null || scaleInput == "B" || scaleInput == "T") {
        System.out.println("Please enter correct RM20 value within 10 seconds");
        Thread.sleep(10000);
        if ()
          userValue = scaleInput;
        out.writeBytes("RM20 A " + userValue +"\r\n");
        display = inputReceived;
        showMenu();
        scaleInput = null;
     }

}

如您所见,我正在使用Thread.sleep(10000)。我想要睡眠Thread,就像我一样,但是"无限",但只要有人从键盘输入一个输入,就应该让线程继续运行。

有一些简单的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用2个线程,其中1个可用于输入。您必须同步线程,以便在收到输入后,通知等待线程并继续执行

要了解有关同步的更多信息,请尝试使用

Thread Synchronization

答案 1 :(得分:0)

是的,有一种简单的方法,那就是使用旧时尚阻止IO。你有的代码 发布不包括你如何获得输入,所以我不能那么具体,但一般 当你尝试从像tcp套接字的流读取或用户正在写的东西 stdin读取调用将阻塞,直到数据可用。例如,将stdin包装在 bufferedReader和刚刚调用readLine将使线程等待直到数据 在继续之前可用。如果您没有任何特定需求,那将是您的全部 需要。无需拨打Thread.sleep

如果这对您没有帮助,那么您需要更明确地了解自己的身份 做得到你正在等待的输入。