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-05-19 21:34:53 发布