Java Thread.sleep in循环不工作,有其他选择吗?

Java Thread.sleep in循环不工作,有其他选择吗?,java,multithreading,sleep,Java,Multithreading,Sleep,我被告知循环中不允许使用thread.sleep(),但我需要使用它,因为我调用的套接字每秒有一个限制 还有别的办法吗 for (int i=0; i < 100; i++) { try { Thread.sleep(300); } catch (InterruptedException ex) { Logger.getLogger(bulkWhoIsCommand.class.getName()).log(

我被告知循环中不允许使用thread.sleep(),但我需要使用它,因为我调用的套接字每秒有一个限制

还有别的办法吗

for (int i=0; i < 100; i++) {
    try {
        Thread.sleep(300);
    } catch (InterruptedException ex) {
        Logger.getLogger(bulkWhoIsCommand.class.getName()).log(
                Level.SEVERE, null, ex);
    }
}
for(int i=0;i<100;i++){
试一试{
睡眠(300);
}捕获(中断异常例外){
Logger.getLogger(bulkWhoIsCommand.class.getName()).log(
级别(严重、空、ex);
}
}

您可以使用
阻塞队列的
轮询
方法

private final BlockingQueue<Void> pause = new ArrayBlockingQueue<Void>(1);

public void test() throws InterruptedException {
    pause.poll(100 * 300, TimeUnit.MILLISECONDS);
}
private final BlockingQueue pause=new ArrayBlockingQueue(1);
public void test()引发InterruptedException{
暂停.轮询(100*300,时间单位.毫秒);
}

这项技术的奇妙之处在于,如果您决定中止暂停,您可以在队列中插入某些内容以中止暂停。

您可以使用
阻塞队列的
轮询
方法:

private final BlockingQueue<Void> pause = new ArrayBlockingQueue<Void>(1);

public void test() throws InterruptedException {
    pause.poll(100 * 300, TimeUnit.MILLISECONDS);
}
private final BlockingQueue pause=new ArrayBlockingQueue(1);
public void test()引发InterruptedException{
暂停.轮询(100*300,时间单位.毫秒);
}

这项技术的奇妙之处在于,如果您决定中止暂停,您可以在队列中插入某些内容以中止暂停。

您可以使用
阻塞队列的
轮询
方法:

private final BlockingQueue<Void> pause = new ArrayBlockingQueue<Void>(1);

public void test() throws InterruptedException {
    pause.poll(100 * 300, TimeUnit.MILLISECONDS);
}
private final BlockingQueue pause=new ArrayBlockingQueue(1);
public void test()引发InterruptedException{
暂停.轮询(100*300,时间单位.毫秒);
}

这项技术的奇妙之处在于,如果您决定中止暂停,您可以在队列中插入某些内容以中止暂停。

您可以使用
阻塞队列的
轮询
方法:

private final BlockingQueue<Void> pause = new ArrayBlockingQueue<Void>(1);

public void test() throws InterruptedException {
    pause.poll(100 * 300, TimeUnit.MILLISECONDS);
}
private final BlockingQueue pause=new ArrayBlockingQueue(1);
public void test()引发InterruptedException{
暂停.轮询(100*300,时间单位.毫秒);
}



这项技术的神奇之处在于,如果您决定中止暂停,您可以在队列中插入一些内容来中止暂停。

为什么不允许
线程.睡眠
呢?您面临什么样的问题?这是编译器错误还是代码没有按预期工作?谁告诉你不允许使用
Thread.sleep()
?不建议使用@DavidWallace-
Thread.sleep()
,因为它通常表示代码设计错误。正确实现的算法很少要求暂停线程。为什么要暂停循环?为什么不直接调用
Thread.sleep(300*100)
?为什么不允许
Thread.sleep
?您面临什么样的问题?这是编译器错误还是代码没有按预期工作?谁告诉你不允许使用
Thread.sleep()
?不建议使用@DavidWallace-
Thread.sleep()
,因为它通常表示代码设计错误。正确实现的算法很少要求暂停线程。为什么要暂停循环?为什么不直接调用
Thread.sleep(300*100)
?为什么不允许
Thread.sleep
?您面临什么样的问题?这是编译器错误还是代码没有按预期工作?谁告诉你不允许使用
Thread.sleep()
?不建议使用@DavidWallace-
Thread.sleep()
,因为它通常表示代码设计错误。正确实现的算法很少要求暂停线程。为什么要暂停循环?为什么不直接调用
Thread.sleep(300*100)
?为什么不允许
Thread.sleep
?您面临什么样的问题?这是编译器错误还是代码没有按预期工作?谁告诉你不允许使用
Thread.sleep()
?不建议使用@DavidWallace-
Thread.sleep()
,因为它通常表示代码设计错误。正确实现的算法很少要求暂停线程。为什么要暂停循环?为什么不直接调用Thread.sleep(300*100)
?你是想让它轮询30秒吗?问题中的代码休眠0.3秒。@DavidWallace OP的代码执行0.3秒休眠100次=30秒。哦,当然。不知道我在想什么。很好的技术。我不知道如何滥用
阻塞队列。poll
做与
线程完全相同的事情。sleep
改进了软件设计。用虚拟队列混淆睡眠是一种更大的代码气味。顺便说一下,您不能将任何内容放入
阻止队列中。没有
Void
实例,不允许
null
。如果您想有一个可以提前终止的睡眠,请使用
对象。wait
条件。wait
,因为它们都是用于该用例的。您的意思是让它轮询30秒吗?问题中的代码休眠0.3秒。@DavidWallace OP的代码执行0.3秒休眠100次=30秒。哦,当然。不知道我在想什么。很好的技术。我不知道如何滥用
阻塞队列。poll
做与
线程完全相同的事情。sleep
改进了软件设计。用虚拟队列混淆睡眠是一种更大的代码气味。顺便说一下,您不能将任何内容放入
阻止队列中。没有
Void
实例,不允许
null
。如果您想有一个可以提前终止的睡眠,请使用
对象。wait
条件。wait
,因为它们都是用于该用例的。您的意思是让它轮询30秒吗?问题中的代码休眠0.3秒。@DavidWallace OP的代码执行0.3秒休眠100次=30秒。哦,当然。不知道我在想什么。很好的技术。我不知道如何滥用
阻塞队列。poll
做与
线程完全相同的事情。sleep
改进了软件设计。用虚拟队列混淆睡眠是一种更大的代码气味。顺便说一下,您不能将任何内容放入
阻止队列中。疗法