为什么 Thread.sleep 不好用
对于这个反复出现的问题,我深表歉意,但我还没有找到任何满意的答案。大多数问题都有自己特定的用例:
Java - thread.sleep
的替代方案 有没有更好或替代的方法来跳过/避免在Java中使用Thread.sleep(1000)?
我的问题是针对非常通用的用例。等待条件完成。做一些操作。检查条件。如果条件不为 true,请等待一段时间,然后再次执行相同的操作。
例如,考虑一个通过调用 DynamoDB 表的 createAPI 表来创建其方法。DynamoDB 表需要一些时间才能变为活动状态,以便该方法调用其 DescribeTable API 以定期轮询状态,直到一段时间(假设 5 分钟 - 由于线程调度引起的偏差是可以接受的)。如果表在 5 分钟内变为活动状态,则返回 true,否则将引发异常。
下面是伪代码:
public void createDynamoDBTable(String name) {
//call create table API to initiate table creation
//wait for table to become active
long endTime = System.currentTimeMillis() + MAX_WAIT_TIME_FOR_TABLE_CREATE;
while(System.currentTimeMillis() < endTime) {
boolean status = //call DescribeTable API to get status;
if(status) {
//status is now true, return
return
} else {
try {
Thread.sleep(10*1000);
} catch(InterruptedException e) {
}
}
}
throw new RuntimeException("Table still not created");
}
我理解通过使用阻塞当前线程,从而消耗资源。但是在相当中等大小的应用程序中,一个线程是一个大问题吗?
我在某个地方读到了使用并在那里进行状态轮询。但同样,我们必须使用至少1个线程初始化此池,其中将运行可运行的方法以进行轮询。Thread.sleep
ScheduledThreadPoolExecutor
任何关于为什么使用的建议都被认为是一个坏主意,以及实现与上述相同的替代选项是什么。Thread.sleep