Object类里面提供专门方法:
·等待:public final void wait()throws InterruptedException;
·唤醒第一个等待线程:public final void notify();
·唤醒全部等待线程,哪个优先级最高先执行:public final void notifyAll()。
范例:
class Info {
private String title;
private String content;
private boolean flag = true;
public synchronized void set(String title, String content) {
if (this.flag == false) {
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.title = title;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.content = content;
this.flag = false;
super.notify();
}
public synchronized void get() {
if (this.flag == true) {
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(this.title + "->" + this.content);
this.flag = true;
super.notify();
}
}
class Productor implements Runnable {// 生产者类
private Info info;
public Productor(Info info) {
this.info = info;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
this.info.set("蜡笔小新", "好学生");
} else {
this.info.set("小白", "好狗狗");
}
}
}
}
class Customer implements Runnable {
private Info info;
public Customer(Info info) {
this.info = info;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
this.info.get();
}
}
}
public class Demo {
public static void main(String[] args) {
Info info = new Info();
new Thread(new Productor(info)).start();
new Thread(new Customer(info)).start();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/4675d94e0c7d175240c825a1903e5059.png)