Java线程睡眠

Mar*_*nio 1 java multithreading

我有一个主要的for循环,它将请求发送到外部系统.外部系统可能需要几秒甚至几分钟才能响应.
此外,如果请求数达到MAX_REQUESTS,则当前for循环应该休眠几秒钟.

这是我的情景.让我们说主要for-loop进入睡眠时间为5秒,因为它已达到MAX_REQUESTS.然后说一个先前的外部请求从callExternalSystem()返回.当前处于SLEEP状态的主要for循环线程会发生什么?它会被中断并继续处理还是继续休眠?

for(...){
  ...
  while(numRequestsProcessing > MAX_REQUESTS){
     Thread.sleep(SLEEP_TIME);
  }
  ...
 callExternalSystem();

}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Jon*_*eet 5

除非你有一些代码来中断睡眠线程,否则它将继续睡眠直到所需的时间结束.如果您不希望这种情况发生,您可以使用wait()/ notify()而不是sleep()使另一个线程可以通知对象主线程处于休眠状态,以便将其唤醒.这依赖于有另一个线程的通知,当然,外部系统回应, -你是如何得到响应返回它不是真正清楚.

编辑:听起来真的应该使用Semaphore.每次主线程想要发出请求时,它都会获得许可.每次有响应时,都会发布许可证.然后,您只需要设置尽可能多的许可,就像您想要并发请求一样.使用tryAcquire,如果你希望能够指定在主线程超时-但想想你想做的事,如果你已经拥有了出色的多的要求你快乐的事情是什么.