import java.util.ArrayList;
import java.util.List;
public class ThreadTest生产者消费者 {
public static void main(String[] args) {
//仓库
List li = new ArrayList();
//两个线程
Thread t1 = new Thread(new produce(li));
Thread t2 = new Thread(new Consumer(li));
//设置名字
t1.setName("生产者线程");
t2.setName("消费者线程");
//启动
t1.start();
t2.start();
}
}
//生产者
class produce implements Runnable{
//仓库,容量1
List lst = new ArrayList();
public produce(List lst) {
this.lst = lst;
}
@Override
public void run() {
synchronized (lst){
while(true){
//如果仓库满了,就停止生产
if(lst.size() > 0){
try {
lst.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//如果仓库没满,就继续生产
lst.add(new Object());
System.out.println(Thread.currentThread().getName());
//满了之后,唤醒消费者消费
lst.notifyAll();
}
}
}
}
//消费者
class Consumer implements Runnable{
//仓库.容量1
List lst = new ArrayList();
public Consumer(List lst) {
this.lst = lst;
}
@Override
public void run() {
synchronized (lst){
//一直消费
while(true){
//仓库是空的,就等待
if(lst.size() == 0){
try {
lst.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//仓库不是空的,就消费
lst.remove(0);
System.out.println(Thread.currentThread().getName());
//消费完了,就唤醒生产者继续生产
lst.notifyAll();
}
}
}
}
多线程的双线程轮流唤醒
最新推荐文章于 2022-07-16 15:48:15 发布