【发布时间】:2013-03-05 17:56:52
【问题描述】:
我正在开发一个多线程程序,我试图确保每个线程都在为30 minutes 运行。假设如果我们有10 threads,那么10 之外的每个线程都应该为30 minutes 运行。
下面是我的代码-
class ThreadTask implements Runnable {
private final long endTime;
public ThreadTask(long endTime) {
this.endTime = endTime;
}
@Override
public void run() {
while (System.currentTimeMillis() <= endTime) {
// do something meaningful
}
}
}
public class TestPool {
public static void main(String[] args) {
// create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(1000);
long startTime = System.currentTimeMillis();
long endTime = startTime + (30 * 60 * 1000);
for (int i = 0; i < threads; i++) {
service.submit(new ThreadTask(endTime));
}
// wait for termination
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
}
}
现在我的问题是-
上面的代码是否保证每个线程同时启动并运行30 minutes?我不确定将线程放入线程池需要多少时间。但看起来有些线程可能会启动得有点晚,并且它们不会完全运行30 minutes,可能不到 30 分钟。
我正在寻找每个线程应该同时启动并且它们应该 准确运行
30 minutes
【问题讨论】:
-
不,它们不会同时启动,不,它们不会完全运行 30 分钟,具体取决于“有意义的事情”需要多长时间。
标签: java multithreading threadpool executorservice