控制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

回到顶部