public class 生产者和消费者 {
//涉及 线程安全 线程通信
public static void main(String[] args){
//生产者线程nue出来
Provider provider = new Provider();
//消费者线程nue出来
Consume consume = new Consume();
//新建数据源 nue出来访问
DataSource dataSource = new DataSource();
provider.dataSource = dataSource;
consume.dataSource = dataSource;
//运行程序
provider.start();
consume.start();
}
/*
*生产者
*/
static class Provider extends Thread{
public DataSource dataSource;
@Override
public void run() {
super.run();
for (int i = 0; i < 100; i++) {
//生产数据
dataSource.add("包子:"+i);
}
}
}
/*
*消费者
*/
static class Consume extends Thread{
public DataSource dataSource;
@Override
public void run() {
super.run();
for (int i = 0; i < 100; i++) {
//消费数据
String data = dataSource.getData();
}
}
}
/*
*数据源
*/
static class DataSource{
private List<String> stringList = new ArrayList<>();
public synchronized void add(String data){
while (!isNull()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("生产数据:"+ data);
stringList.add(data);//生产往里存放数据
notifyAll();
}
public boolean isNull(){
return stringList.size()==0;
}
public synchronized String getData(){
String data = null;
while (isNull()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
data = stringList.get(0);
stringList.remove(0);
System.out.println("拿到了消费数据没有:"+data);
notifyAll();
return data;
}
}
}
生产者和消费者
最新推荐文章于 2024-10-30 10:20:22 发布
本文介绍了一个简单的生产者消费者模式实现,通过Java线程间的通信来确保数据的安全存取。生产者负责生成数据并将其添加到数据源中,而消费者则从数据源中取出并消费这些数据。使用synchronized关键字和wait/notify机制来协调生产者与消费者的同步问题。
摘要由CSDN通过智能技术生成