import java.util.Queue;
import java.util.ArrayList;
import java.util.LinkedList;
public class MultiThreads1 {
public static void main(String[] args) throws InterruptedException {
var q = new TaskQueue();
var ts = new ArrayList<Thread>();
for (int i = 0; i < 5; i++) {
var t = new Thread(() -> {
// 执行task
while (true) {
try {
String s = q.getTask();
System.out.println("execute task : " + s);
} catch (InterruptedException e) {
return;
}
}
});
t.start();
ts.add(t);
}
var add = new Thread(() -> {
for (int i = 0; i < 10; i++) {
// 放入task
String s = "t-" + Math.random();
System.out.println("add task : " + s);
q.addTask(s);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
});
add.start();
add.join();
Thread.sleep(100);
for (var t : ts) {
t.interrupt();
}
}
}
class TaskQueue {
Queue<String> queue = new LinkedList<>();
/**
* 添加任务到队列中
*
* @param s 任务名称
*/
public synchronized void addTask(String s) {
this.queue.add(s);
this.notifyAll();
}
/**
* 获取任务
*
* @return 任务名称
* @throws InterruptedException 中断异常
*/
public synchronized String getTask() throws InterruptedException {
while (queue.isEmpty()) {
this.wait();
}
return queue.remove();
}
}