Вот мой пример, но он не выполняется.Правильно работает только для моего первого пула потоков, но второй пул потоков не был запущен.Это правильный путь или нет, если это правильно, где я ошибаюсь, если это не так, как я реализую несколько исполнителей службы.В моем примере сохранение API выполнено успешно, но метод назначения книги назначен успешно, но после того, как Книга API не выполнена, мне интересно это поведение
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MyTestClass {
public static void main(String args[]) {
//Create class object
MyTestClass myObj = new MyTestClass();
// Create List A
List<String> a = new ArrayList<>();
a.add("Test1");
a.add("Test2");
a.add("Test3");
a.add("Test4");
//Create List B
List<String> b = new ArrayList<>();
b.add("Test1");
b.add("Test2");
b.add("Test3");
b.add("Test4");
b.add("Test5");
b.add("Test6");
b.add("Test7");
b.add("Test3");
b.add("Test4");
b.add("Test5");
b.add("Test6");
b.add("Test7");
//Call my method
myObj.myMethod(a, b);
}
//Multi-threading example in appointment book method execute first api but its not called the second api
void myMethod(List<String> listA, List<String> listB){
ExecutorService threadPool = Executors.newFixedThreadPool(listA.size());
List<Callable<Object>> tasks = new ArrayList<>();
for (String strA : listA) {
tasks.add(Executors.callable(new Thread() {
@Override
public void run() {
processA(strA);
}
}));
}
try {
//Execute first thread pool for save
threadPool.invokeAll(tasks);
} catch (InterruptedException e1) {
e1.printStackTrace();
System.out.println("Error while running threads");
}
threadPool.shutdown();
//Call book appointment api
bookAppointMent(listB);
}
//Book appointment
void bookAppointMent(List<String> listB) {
ExecutorService threadPool2 = Executors.newFixedThreadPool(listB.size());
List<Callable<Object>> tasks2 = new ArrayList<>();
for (String strB : listB) {
tasks2.add(Executors.callable(new Thread() {
@Override
public void run() {
// Add task
processB(strB);
}
}));
}
try {
//Execute thread pool2
threadPool2.invokeAll(tasks2);
} catch (InterruptedException e1) {
e1.printStackTrace();
System.out.println("Error while running threads");
}
//Shutdown pool-2
threadPool2.shutdown();
}
//Save appointment
public void processA(String a){
//Here its save API
System.out.println("Save A successfully...." + a);
}
//Book Appointment In this method only first api called but second one is not called
public void processB(String b){
//Here is First API call - This only called
System.out.println("Appointment booked successfully...." + b);
//Here is second API call - Its not called
processAfterAppBooked(b);
}
//Process after book app
public void processAfterAppBooked(String b) {
//Second api call - its not execute
System.out.println("After appointment booked " + b);
}
}