控制ExecutorService每秒最多执行N个任务
如何控制/限制提交给的任务ExecutorService
?我已经SMSTask
发送了SMS消息,并且我需要控制执行程序,以便它最多只能以每秒N条消息的速度发送。
回答:
假设您为每个任务创建一条SMS消息,则可以使用ScheduleExecutorService。
final Queue<Task> tasks = new ConcurrentLinkedQueue<Task>();int ratePerSecond = 10;
final ExecutorService es = Executors.newCachedThreadPool();
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
final Task task = tasks.poll();
if (task == null) return;
es.submit(new Runnable() {
@Override
public void run() {
process(task);
}
});
}
}, 0, 1000/ratePerSecond, TimeUnit.MILLISECONDS);
将任务添加到队列中,它们将以每秒10个的速度处理。
以上是 控制ExecutorService每秒最多执行N个任务 的全部内容, 来源链接: utcz.com/qa/412634.html