文档章节

Java多线程 生产者与消费者

矢量V
 矢量V
发布于 2017/02/07 19:04
字数 296
阅读 2
收藏 0

package cn.buaa;

class Info{ //用来保存信息
 private String title; //标题
 private String content; //内容
 
 private boolean flag = true; //指示灯功能
 // flag == true ,表示可以生产,但是不能取走
 // flag == false, 表示可以取走,但是不允许生产
 
 public synchronized void set(String title, String content){  //生产
  if(flag == false){ //已经生产过了
   try {
    super.wait(); //等待消费者将内容取走
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  this.title = title;
  try {
   Thread.sleep(1000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  this.content = content;
  this.flag = false; //表示已经生产过了
  super.notify();
 }
 
 public synchronized void get(){ //消费
  if(this.flag == true){ //可以生产但是不能取走
   try {
    super.wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  try {
   Thread.sleep(1000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println(this.title + "==>" + this.content);
  this.flag = true;
  super.notify();
 
 }
 
}

class Producer implements Runnable{ //生产者实现Runnable 接口
 private Info info;
 
 public Producer(Info info){
  this.info = info;
 }
 @Override
 public void run() {
  for(int x=0; x<50; x++){
   if(x%2 == 0){
    this.info.set("一种小动物","草泥马");
   }else{
    this.info.set("一位教师","李兴华");
   }
  }
  
  
 }
}

class Customer implements Runnable{ //消费者实现Runnable接口
 private Info info;
 public Customer(Info info){
  this.info = info;
 }
 @Override
 public void run() {
  for(int i=0; i<50; i++){
   this.info.get();
  }
  
 }
}

public class Hello {

 public static void main(String[] args) {
  Info info = new Info();
  new Thread(new Producer(info)).start();  //启动线程
  new Thread(new Customer(info)).start();
 }

}
 
 

 

© 著作权归作者所有

矢量V
粉丝 0
博文 1
码字总数 296
作品 0
合肥
私信 提问
Java多线程生产者消费者实例

Java生产者消费者实例 设计:涉及到的类有食物、厨师、服务员、顾客以及测试类。厨师负责生产食物,服务员服务于顾客,顾客负责点餐以及吃饭。 技术点:Java多线程,线程安全(synchronized),...

cicadaT
2017/11/05
0
1
Java线程:并发协作-生产者消费者模型

Java线程:并发协作-生产者消费者模型 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确...

scau_JD
2014/06/13
0
0
JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52714313 JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费...

Aduroidpc
2016/10/01
0
0
java中高级大公司多线程面试题

1)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编...

java成功之路
2018/10/30
0
0
Java中高级面试必问之多线程TOP50(含答案)

以下为大家整理了今年一线大厂面试被问频率较高的多线程面试题,由于本人的见识局限性,所以可能不是很全面,也欢迎大家在后面留言补充,谢谢。 1、什么是线程? 2、什么是线程安全和线程不安...

老道士
2018/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

G1 垃圾收集器介绍-转

https://www.cnblogs.com/ASPNET2008/p/6496481.html

Java搬砖工程师
29分钟前
1
0
超高性能 key-value 数据库 Redis-基础数据结构

Redis的魅力 缓存大致可以分为两类:1.一种是应用内缓存,比如Map(简单的数据结构),以及EH Cache(Java第三方库);2.另一种 就是缓存组件,比如Memached,Redis;Redis(remote dictiona...

须臾之余
40分钟前
3
0
Mysql表分区的选择与实践小结

在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快。这时候可能就需要通过分库,分表,分区来解决这些性能瓶颈。 一. 选择合适的解决方法 1....

小谜弟
46分钟前
3
0
为 git 添加多个公秘钥

如果想为主机配置多个git设置,设置多个git公、秘钥,只需在生成密钥时指定密钥保持的文件即可,保证保存密钥的文件不同即可。 示例: ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f...

niithub
46分钟前
2
0
walle-web 2.0安装流水

一、环境安装 VMware Workstation,centos7.6 64位,lnmp1.5 二、安装lnmp1.5 wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1......

我心中有猛狗
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部