Я работаю над многопоточной программой, в которой я пытаюсь убедиться, что каждый поток работает для 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