Задача:
- Реализовать Колцентр
- Поток-колцентра после запуска начинает генерировать несколько “звонков”
- Потоки-операторы берут доступные звонки в работу
Проблема: оператор начинает сразу обрабатывать запрос. Хочу (но не знаю как), чтобы операторы не ждали, пока сгенерится общий пул заявок и сразу начали обработку заявки после первой заявки. Помогите, пожалуйста.
public class Main {
public static void main(String[] args) throws InterruptedException {
CallCenter callCenter = new CallCenter();
Thread atc = new Thread(callCenter::workATC, "АТС");
Thread profy1 = new Thread(callCenter::workOperator, "Operator 1");
Thread profy2 = new Thread(callCenter::workOperator, "Operator 2");
Thread profy3 = new Thread(callCenter::workOperator, "Operator 3");
profy1.start();
Thread.sleep(1000);
profy2.start();
Thread.sleep(1000);
profy3.start();
atc.start();
atc.join();
profy1.join();
profy2.join();
profy2.join();
}
}
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
public class CallCenter {
public Queue<String> queue = new ConcurrentLinkedQueue<>();
int iterations = 0;
public void workATC() {
try {
for (int i = 1; i <= (12); i++) {
String call = "request " + i;
queue.add(call);
System.out.printf("%s added to queue ATC %s\n", Thread.currentThread().getName(), call);
}
iterations++;
Thread.sleep(3350);
}catch (Exception e){
e.printStackTrace();
}
}
public void workOperator() {
try {
Thread.sleep(3000);
while (true) {
if (queue.isEmpty()) {
break;
} else {
System.out.printf("%s has worked with %s\n", Thread.currentThread().getName(), queue.poll());
System.out.printf("%d requests has left \n", queue.size());
Thread.sleep(3000);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}