如何控制/限制提交给的任务ExecutorService?我已经SMSTask发送了SMS消息,并且我需要控制执行程序,以便它最多只能以每秒N条消息的速度发送。
ExecutorService
SMSTask
假设您为每个任务创建一条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个的速度处理。