我想使用Java中的執行器服務以並行方式安排相同的命令。我編寫了一個線程池執行程序的包裝器,它使用並行計數將命令調度爲參數,並在for循環中調度命令(即多次執行相同的實例)。多次向Java執行器服務提交相同的(Runnable)命令
這種方法是否正確?有沒有建議的方式來做到這一點?我使用spring來創建這些bean。
我想使用Java中的執行器服務以並行方式安排相同的命令。我編寫了一個線程池執行程序的包裝器,它使用並行計數將命令調度爲參數,並在for循環中調度命令(即多次執行相同的實例)。多次向Java執行器服務提交相同的(Runnable)命令
這種方法是否正確?有沒有建議的方式來做到這一點?我使用spring來創建這些bean。
您可以使用ScheduledExecuterService
如下:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorTest {
private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public static void main(final String[] args) throws InterruptedException {
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("executed");
}
}, 0, 1, TimeUnit.SECONDS);
Thread.sleep(10000);
scheduler.shutdownNow();
}
}
這將執行run
方法每秒立即啓動。
通過這種方法,你可以多次將其添加到scheduledExecuterService
:
Runnable command = new Runnable() {
public void run() {
System.out.println("executed");
}
};
scheduler.scheduleAtFixedRate(command, 0, 1, TimeUnit.SECONDS);
scheduler.scheduleAtFixedRate(command, 0, 1, TimeUnit.SECONDS);
爲什麼不使用'ScheduledExecutorService'? – user1329572 2012-07-08 12:52:36
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html檢查方法「scheduleAtFixedRate」和「scheduleWithFixedDelay」 – 2012-07-08 12:54:34
我使用Scheduled Executor服務和調度在固定速率。但是,我並沒有安排一個命令,而是希望它以平行的方式排定,例如,它應該在第1秒運行5次,在第2秒運行5次,在第3秒運行5次,而不是在第1秒運行,在第2秒運行。 – u07103 2012-07-08 14:15:13