Chciałbym aby jednocześnie pracowały 2 wątki ze specialService wykonujące te samą funkcję jednak nie rozumiem czemu nie działa
main(){
ExecutorService specialService = Executors.newFixedThreadPool(2);
specialService.submit(() -> {
while (!isEndOfDayWork || anyTaskLeft) {
Employee employee = removeFromQueue();
if (employee != null) {
handleSpecialStatusPriorityClient(employee);
}}});
}
private void handleSpecialStatusPriorityClient(Employee employee){
Client specialStatusClient = specialStatusClients.poll();
handleTheQuestion(specialStatusClient, employee);
employeesLock.lock();
try{
employees.add(employee);
}finally {
employeesLock.unlock();
}
}
private void handleTheQuestion(Client handledClient, Employee employee){
if(handledClient!=null) {
final long time = handledClient.getQuestion().getAmountOfTimeToHandleQuestion();
try {
Thread.sleep(time * 1000);
System.out.println(employee.getID() + " just handled "+ handledClient.getQuestion() + " task!");
} catch (InterruptedException e) {
System.out.println("Problem during thread sleeping");
}
}
}
Problemem jest, że działa tylko 1 a w executorze utworzyłem 2.
Gdy rozbije na dwa tak jak niżej i dam takie same submity to jednak działa, więc pytanie jest moje czemu ta wersja u góry nie działa
ExecutorService specialService = Executors.newFixedThreadPool(2);
ExecutorService specialService1 = Executors.newFixedThreadPool(1);
ExecutorService specialService2 = Executors.newFixedThreadPool(1);
zwykle tylko się wydaje, że potrzeba wątków
. Napisz co chcesz uzyskać.pracowników
==wątków. Wrzucasz submit - to trafia do kolejki, aż jakiś wolny wątek się nim będzie mógł zająć.