2012-01-06 171 views
5

我知道使用睡眠方法延迟线程的传统方式。我的问题是所谓我有以下几点:Java线程:线程之间的执行程序服务延迟

ExecutorService threadExecutor = Executors.newFixedThreadPool(5); 

有没有办法使用的ExecutorService类,以便在不使用的睡眠方法,每个线程之间的延迟说呢?我的意思是在这个目的下有一个ExecutorService类的方法吗?

+2

Whjat你的意思是“每个线程之间的延迟”?你在每个提交的任务的执行之间拖延了吗? – skaffman 2012-01-06 15:27:18

+0

你能否说出延迟的原因?大多数情况下,您会让Runnables/Futures使用某种阻塞。此外,您需要哪些功能使sleep()不适合使用? – 2012-01-06 15:28:16

+0

类文档没有列出任何内容。 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html – Max 2012-01-06 15:29:30

回答

9

你的意思是这样

ScheduledExecutorService service = Executors.newScheduledThreadPool(5); 

service.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS); 

如果你想三个任务10秒分开,你可以做

service.execute(task1); 
service.schedule(task2, 10, TimeUnit.SECONDS); 
service.schedule(task3, 20, TimeUnit.SECONDS); 
+0

我认为上述情况会导致某个特定任务的周期性延迟 - 这意味着相同的任务会在一个周期性的时间段内运行。我想要的是任务之间的延迟,例如任务1(runnable obj1)首先运行,任务2(runnable obj2)在提交runnable obj1 10秒后开始运行。我想知道这是否可以使用ExecutorService或某种类型.. – yapkm01 2012-01-06 16:05:57

+0

根据您的意见更新。 – 2012-01-06 16:18:27