package com.thread.waitAndnotify;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class WaitAndNotify {
static WaitAndNotify waitAndNotify = new WaitAndNotify();
Object obj = new Object();
static List<Integer> list = new ArrayList<>();
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 1; i++) {
executorService.execute(new Thread02(waitAndNotify));
}
TimeUnit.MILLISECONDS.sleep(5000);
for (int i = 0; i < 1; i++) {
executorService.execute(new Thread01(i, waitAndNotify));
}
executorService.shutdown();
}
public static class Thread01 implements Runnable {
private Integer i;
private WaitAndNotify waitAndNotify;
public Thread01(Integer i, WaitAndNotify waitAndNotify) {
this.i = i;
this.waitAndNotify = waitAndNotify;
}
@Override
public void run() {
waitAndNotify.add(i);
}
}
public static class Thread02 implements Runnable {
WaitAndNotify waitAndNotify;
public Thread02(WaitAndNotify waitAndNotify) {
this.waitAndNotify = waitAndNotify;
}
@Override
public void run() {
System.out.println("新数据为:"+waitAndNotify.get());
}
}
public void add(Integer i) {
synchronized(obj){
list.add(i);
System.out.println("有新数据插入,唤醒获取数据线程");
obj.notify();
}
}
public Integer get() {
synchronized(obj){
try {
System.out.println("等待集合中插入新数据");
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return list.get(0);
}
}
wait()与 notify() 的使用
最新推荐文章于 2024-01-22 23:50:37 发布