线程延迟使用调度程序或Thread.Sleep

时间:2015-08-07 16:32:59

标签: java multithreading delay sleep

在我的应用程序中,我正在调用第三方供应商Web服务。我需要延迟我的线程处理以实现供应商webservice支持的所需吞吐量。

我有两个选择 1.使用Thread.Sleep 2.使用帖子How to start a thread after specified time delay in java

中提到的ScheduledThreadPoolExecutor

想知道哪个是更好的选择,因为我们使用Vendor webservice发送时间关键信息(短信)。 任何帮助表示赞赏。

3 个答案:

答案 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;