我正在开发一个多线程程序,其中我试图确保每个线程都运行30 minutes
。假设我们有10 threads
,那么10
中的每个线程都应该运行30 minutes
。在执行器服务中的ThreadPool中添加线程
下面是我的代码 -
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分钟,这取决于“有意义的事”需要多长时间运行。 – 2013-03-05 17:59:59