import java.util.ArrayList;
import java.util.List;
public class Desk {
private List<String> list = new ArrayList<>();
//三个生产者
public synchronized void put(){
try{
String name = Thread.currentThread().getName();
if(list.size()==0){
list.add(name+"生产的商品");
System.out.println(name+"生产了一个商品");
Thread.sleep(2000);
//唤醒别的线程,等待自己
this.notifyAll();
this.wait();
}else {
//有产品了 继续唤醒别的线程 等待自己
this.notifyAll();
this.wait();
}
}catch (Exception e){
e.printStackTrace();
}
};
//两个消费者
public synchronized void get(){
try{
String name = Thread.currentThread().getName();
if (list.size()==1){
System.out.println(name+"对"+ list.get(0) +"进行了消费");
list.clear();
Thread.sleep(2000);
this.notifyAll();
this.wait();
}else {
this.notifyAll();
this.wait();
}
}catch (Exception e){
e.printStackTrace();
}
};
}
//执行代码
public class ThreadTest2 {
public static void main(String[] args) {
Desk desk =new Desk();
new Thread(()->{
while (true){
desk.put();
}
},"provide一").start();
new Thread(()->{
while (true){
desk.put();
}
},"provide二").start();
new Thread(()->{
while (true){
desk.put();
}
},"provide三").start();
new Thread(()->{
while (true){
desk.get();
}
},"consumer一").start();
new Thread(()->{
while (true){
desk.get();
}
},"consumer二").start();
}
}
//执行结果

文章描述了一个使用Java编写的多线程生产者-消费者模型,展示了三个生产者线程轮流生产商品,两个消费者线程消耗商品,实现并发控制。

被折叠的 条评论
为什么被折叠?



