У меня есть два экземпляра ExecutorService
: один с 4 потоками, а другой - с 20 потоками. Я хочу, чтобы при нажатии кнопки Сервис 1 останавливался и дождался завершения службы 2. И после этого Service 1 продолжает работать.ExecutorService останавливается и ждет другого ExecutorService для завершения на Java
Я пытался сделать это с wait
и notify
, но он не работает, как ожидалось:
ExecutorService 1:
public void readFile(JTextArea textArea) {
try {
File file = new File(this.fm.fullPath);
if (!file.exists()) {
return;
}
BufferedReader br = new BufferedReader(new FileReader(this.fm.fullPath));
ExecutorService executor = Executors.newFixedThreadPool(main.TOTALSTRINGS);
String line = br.readLine();
int i=1;
while (line != null) {
powThread t = new powThread("Thread" + (i+1), line, textArea);
executor.execute(t);
line = br.readLine();
i++;
}
executor.shutdown();
Thread t = new Thread() {
public void run() {
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
br.close();
} catch (Exception e) {
}
}
};
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
ExecutorService2:
public void generateNumStrings(JTextArea textArea) {
StringGenerator sg = new StringGenerator();
int[] dynamicThreads = main.calcThreadsTotal();
int totalThreads = dynamicThreads.length;
ExecutorService executor = Executors.newFixedThreadPool(totalThreads);
for(int i=0; i<totalThreads; i++) {
generateThread t = new generateThread("Thread" + (i+1), sg, dynamicThreads[i], this.fm);
executor.execute(t);
}
executor.shutdown();
Thread t = new Thread() {
public void run() {
try {
textArea.setText("");
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
textArea.append("File write successfully!");
} catch (InterruptedException e) {
}
}
};
t.start();
}
Приятный и интересный. –