繁体   English   中英

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

[英]Thread Delay using scheduler or Thread.Sleep

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

我有两个选项1.使用Thread.Sleep 2.使用后面提到的ScheduledThreadPoolExecutor 如何在java中指定的时间延迟后启动一个线程

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

它们与ScheduledThreadPoolExecutor.scheduleWithFixedDelay几乎相同,封装了sleep调用。

由于延迟是100ms,性能差异可以忽略不计。 由于池中的线程,我会使用ScheduledThreadPoolExecutor.scheduleWithFixedDelay 放在系统上的负载量是可管理的,你不会有多个线程从睡眠中醒来以争夺资源。

也来自doc

线程池解决了两个不同的问题:由于减少了每个任务的调用开销,它们通常在执行大量异步任务时提供更高的性能,并且它们提供了一种绑定和管理资源(包括线程)的方法,这些资源在执行集合时会消耗掉。任务。 每个ThreadPoolExecutor还维护一些基本统计信息,例如已完成任务的数量。

使用调度程序方法,您可以选择固定速率或固定延迟。 看看源代码:

    /**
     * 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM