在我的应用程序中,我正在调用第三方供应商Web服务。我需要延迟我的线程处理以实现供应商webservice支持的所需吞吐量。
我有两个选择 1.使用Thread.Sleep 2.使用帖子How to start a thread after specified time delay in java
中提到的ScheduledThreadPoolExecutor想知道哪个是更好的选择,因为我们使用Vendor webservice发送时间关键信息(短信)。 任何帮助表示赞赏。
答案 0 :(得分:2)
它们与ScheduledThreadPoolExecutor.scheduleWithFixedDelay
封装睡眠呼叫几乎相同。
由于延迟为100ms,性能差异可以忽略不计。由于汇集线程,我会使用ScheduledThreadPoolExecutor.scheduleWithFixedDelay
。放在系统上的负载量是可管理的,你不会有多个线程从睡眠中醒来以竞争资源。
同样来自doc
线程池解决了两个不同的问题:它们通常提供 在执行大量异步时提高了性能 任务,由于减少了每个任务的调用开销,并且它们提供了一个 绑定和管理资源的方法,包括线程, 在执行任务集合时消耗。每个ThreadPoolExecutor 还保留了一些基本的统计数据,比如已完成的数量 任务。
答案 1 :(得分:0)
不知道是否将此称为Throttling method calls to M requests in N seconds的副本。问题是不同的,但答案可能是相同的。
答案 2 :(得分:0)
使用调度程序方法,可以选择固定速率或固定延迟。 看一下源代码:
/**
* Period in nanoseconds for repeating tasks. A positive
* value indicates fixed-rate execution. A negative value
* indicates fixed-delay execution. A value of 0 indicates a
* non-repeating task.
*/
private final long period;