Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程等待/睡眠_Java_Multithreading - Fatal编程技术网

Java线程等待/睡眠

Java线程等待/睡眠,java,multithreading,Java,Multithreading,我有以下情况,请有人帮忙: if(checkcondition){ --------(A) ... some code ... } else{ sleep for 20 sec go back to checkconfdition loop @ (A) } 任何帮助都是事先通知的 谢谢 瓦伊巴夫睡觉并不是让一根线醒来做事情的最佳方式。您应该使用callwait使线程等待,然后设置checkcondition的其他线程也将调用notify唤醒第一个线程 这样做的好处是线程将立即醒来,而不是等待2

我有以下情况,请有人帮忙:

if(checkcondition){ --------(A)
...
some code
...
}
else{
sleep for 20 sec
go back to checkconfdition loop @ (A)
}
任何帮助都是事先通知的

谢谢
瓦伊巴夫

睡觉并不是让一根线醒来做事情的最佳方式。您应该使用call
wait
使线程等待,然后设置checkcondition的其他线程也将调用
notify
唤醒第一个线程

这样做的好处是线程将立即醒来,而不是等待20秒才意识到有工作要做


搜索
Java wait notify
,您将找到大量示例。相关的堆栈溢出问题:。

睡眠并不是让线程醒来做事情的最佳方式。您应该使用call
wait
使线程等待,然后设置checkcondition的其他线程也将调用
notify
唤醒第一个线程

这样做的好处是线程将立即醒来,而不是等待20秒才意识到有工作要做



搜索
Java wait notify
,您将找到大量示例。相关堆栈溢出问题:。

您的问题是什么?定义问题。或者你希望有人为这个场景编写代码吗?我需要为这个场景编写代码,我是线程新手,这就是为什么我要问应该采用什么方法,谢谢如果你是线程新手,你应该问的第一件事是“我真的需要线程吗?”。我相信这也是专家们自问的问题…我知道一个糟糕的问题,但我需要问,因为我已经编写了一些使用线程的代码,我需要确保除非满足这个条件,否则线程会等待20秒的间隔。你有什么问题?定义问题。或者你希望有人为这个场景编写代码吗?我需要为这个场景编写代码,我是线程新手,这就是为什么我要问应该采用什么方法,谢谢如果你是线程新手,你应该问的第一件事是“我真的需要线程吗?”。我相信这也是专家们自问的问题……我知道一个不好的问题,但我需要问,因为我已经编写了一些使用线程的代码,我需要确保除非满足此条件,否则线程将等待20秒的间隔。thread.sleep之后,线程是否会返回检查条件并检查再次出现条件?@vaibhav:是的,因为“while(true)”循环。不过,您不应该在这里捕获异常,只需InterruptedException即可。我的推断是,while(true)将使它始终运行。谢谢您的帮助jigar,这个怎么样?在(Somecondition==false | | | System.currentTimeMillis()-startTime==900000){wait(20000)}notify()时编码;这是一个自定义条件,可能是条件变为真,也可能是15分钟后我们一直在重试。Thread.sleep之后,线程是否会返回到checkCondition并再次检查该条件?@vaibhav:是的,因为“while(true)”循环。不过,您不应该在这里捕获异常,只需InterruptedException即可。我的推断是,while(true)将使它始终运行。谢谢您的帮助jigar,这个怎么样?在(Somecondition==false | | | System.currentTimeMillis()-startTime==900000){wait(20000)}notify()时编码;这是一个自定义条件,类似于条件变为真或我们从15分钟后就开始重试。还要注意链接答案中的一个答案,即Java中的新并发类(如Semaphore)比手动执行
wait
notify
更可取。不过,这两种方法都比使用
sleep
更可取。另一个例子是,如果您的条件是“mylist.isEmpty()”,并且您的操作是从中获取一个项目,那么您可以考虑将列表替换为
LinkedBlockingQueue
,然后在循环中调用
mylist.take()
,这将阻止,直到一个项目可用。你说Thread.sleep不能保证回来,我理解。但不是反对。等待也不一定会回来吗?我不认为我说过
sleep
不一定会回来-事实上它最终会回来,而
wait
可能永远不会回来,如果你忘了调用
notify
。好的,我只是回答了我自己的问题。医生说线程。sleep是“计时取决于系统计时器和调度程序的精度和准确性,这意味着它将永远不会返回,但是Object.notify保证会唤醒等待该对象的线程。还请注意该链接答案中的一个答案,即新的并发类(如Java中的信号量)比手动执行
wait
notify
更可取。不过,这两种方法都比使用
sleep
更可取。另一个例子是,如果您的条件是“mylist.isEmpty()”,并且您的操作是从中获取一个项目,那么您可以考虑将列表替换为
LinkedBlockingQueue
,然后在循环中调用
mylist.take()
,这将阻止,直到一个项目可用。你说Thread.sleep不能保证回来,我理解。但不是反对。等待也不一定会回来吗?我不认为我说过
sleep
不一定会回来-事实上它最终会回来,而
wait
可能永远不会回来,如果你忘了调用
notify
。好的,我只是回答了我自己的问题。医生说线程。sleep是“计时取决于系统计时器和调度程序的精度和准确性”,这意味着它将永远不会返回,但是Object.notify保证唤醒等待该对象的线程。
while(true){
    if (checkcondition1) {
        //some code
    } else {
        try {
           Thread.sleep(20*1000);
        } catch (Exception ex) {
        //some action
    }
}