app开发者平台在数字化时代的重要性与发展趋势解析
669
2022-09-09
生产者消费者模型
今天是刚刚接触到生产者消费者模型,原来所谓 的生产者和消费者是指两个不同的模型,其中一个进程是用于生产数据,一个进程用于消费数据我们称为是消费者,当然在两者之间还要有一个数据存储的模型,用来存储生产者产生的数据,当然消费者也从这个数据存储模型中取出数据。
比如上面这个形象的图,就很好的描述了生产者消费者的关系,我们在下面通过一个程序来简单的描述生产者消费者这个模型:
package com.epoint.wdgtest;public class WdgTest{ //生产者消费者 public static void main(String [] args){ Data data=new Data(); new Thread(new DataProvider(data), "线程1").start(); new Thread(new DataConstumer(data), "线程2").start(); } }/* * 数据存储类 */class Data{ private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }/* * 生产者 */class DataProvider implements Runnable{ private Data person; public DataProvider(Data person) { super(); this.person = person; } @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++){ if(i%2==0){ try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } person.setName("张三"); person.setAge(20); } else{ person.setName("李四"); person.setAge(18); } } }}class DataConstumer implements Runnable{ private Data person; public DataConstumer(Data person) { super(); this.person = person; } public void setPerson(Data person) { this.person = person; } @Override public void run() { // TODO Auto-generated method stub System.out.println("name"+person.getName()); System.out.println("age"+person.getAge()); } }
在代码中我们创建两个进行一个是用于数据的产生一个是用于数据的消费,还有一个数据模型是用于数据的存储
但是数据的数据结果却是有问题的
可见数据并不是我们想的那样,这个是因为生产和消费并并没有同步,也就是我们在生产数据的过程中可能跟不上消费的节奏,但是程序可不一样,消费者可不管你生产的如何,还是要进行消费,于是就产生了上面输出的现象。如何解决上面的问题还是需要进行同步处理。下一节继续介绍,因为时间也不早了,明天再写吧。这一节就先认识一下什么是生产者和消费者。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~