线程--生产者与消费者的案例

来源:互联网 发布:nginx 绑定域名访问 编辑:程序博客网 时间:2024/06/05 15:01

一,本章目标

①加深线程同步操作的理解

②了解object类中对线程的支持方法


二,具体内容


先定义一个信息的表示类,生产者和消费者同时占有信息类,这样就把三者联系起来。


写一个生产者类:


生产者每次生产50种信息,生产完50次之后改变信息的内容,为了更好的看出效果,加入延迟操作。

一个消费者类:


通过测试代码来发现程序的问题


程序结果出现了问题:信息不对应,重复取了。之所以出现内容不对应的问题,是因为中间加入的延迟操作,这个时候就可以使用同步操作。

package 线程操作范例;

public class Info {

private String name = "李兴华";
private String content = "java讲师";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public synchronized void set(String name,String content){
this.setName(name);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setContent(content);
}

public synchronized void get(){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(this.getName() + " -->"
+this.getContent());
}
}


class Producer implements Runnable{
private Info info = null;
public Producer(Info info){
this.info = info;
}

public void run() {
// TODO Auto-generated method stub
boolean flag = false;
for(int i=0;i<50;i++){
if(flag){
this.info.set("李兴华","java讲师");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
flag = false;
}else{
this.info.set("mldn","www.mldnjava.cn");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
flag = true;
}
}
}

}


class Consumer implements Runnable{
private Info info = null;
public Consumer(Info info){
this.info = info;
}
public void run() {
// TODO Auto-generated method stub
this.info.get();
}
}

以上的代码解决了数据的完整性问题,但是依然存在重复取的问题,需要使用Object类的支持,所以优化代码如下:


有2个唤醒方法。



直接修改Info类,增加等待与唤醒操作。




此时,才真正完成了生产者与消费者的完成操作。



总结,在本程序中,注意两下两点问题:生产者要不断生产,但是不能生产错误的信息和重复的信息

消费者要不断的取走,但是不能重复取走

object类中对线程的支持:

等待与唤醒方法


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米手机把时间删了怎么办 红米桌面上的时间删了怎么办 华为手机玩游戏老是闪退怎么办 别人家无线网距离太远信号差怎么办 微信公众号交话费交错了怎么办 手机卡里还有话费销户的话怎么办 号码忘记交话费变成空号怎么办 多屏互动没办法隔空播放怎么办? 一个人长期受一件事的打击怎么办 物流信息显示快递被别人签收怎么办 现在打工的人被领导骂怎么办 加密狗丢了打不开软件了怎么办 手机微信可以打开网页打不开怎么办 手机中国网打开网速慢该怎么办 在韩国用中国软件网速特别慢怎么办 淘宝退货快递一直没显示到货怎么办 高二美术生集训时文化课怎么办 唯品会不支持7天无理由退货怎么办 sy来4am了孤存怎么办 淘宝网买的电器坏了怎么办 在闲鱼上买的电器是坏的怎么办 打开时全屏不知变成小屏怎么办 苹果6s原装数据线不充电怎么办 vivo手机安卓系统耗电快怎么办 电视机机顶盒插了电源开不了怎么办 苹果手机更新系统后老是闪退怎么办 16g苹果6s手机内存不足怎么办 苹果以前浏览器页面忽然没了怎么办 白衬衣被别的衣服染了怎么办 把宝贝标题改了没访客了怎么办 微信公众号看不到评论时间了怎么办 微店退款退货买家发空快递怎么办 微信二维码收款顾客少付款了怎么办 江西高考二本差5分上线怎么办 湖南文科考生二本上线差两分怎么办 在商场试鞋自己鞋子被偷怎么办 网易账号忘记密码更换手机了怎么办 一人在外地钱花光了怎么办 银行卡被公安冻结卡里的钱怎么办 在店铺不上班了押工资了怎么办? 在银座的押金拿不出来怎么办