运行结果:

code:

class Info {
private String name = "Carter";
private int age = 25;
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

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

public void run() {
boolean flag = false;
int i;
for(i=1;i<30;i++) {
if (flag) {
this.info.setName("Carter");
try {
Thread.sleep(100);
} catch(Exception e) {
e.printStackTrace();
}
this.info.setAge(25);
flag = false;
} else {
this.info.setName("Steven");
try {
Thread.sleep(100);
} catch(Exception e) {
e.printStackTrace();
}
this.info.setAge(100);
flag = true;
}
}
}
}

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

public void run() {
int i;
for(i=1; i<25;i++) {
try {
Thread.sleep(100);
} catch(Exception e) {
e.printStackTrace();
}
System.out.println(this.info.getName() + " <======> " + this.info.getAge());
}
}
}

public class ThreadTest {
public static void main(String[] args) {
Info info = new Info();
Producer pro = new Producer(info);
Consumer con = new Consumer(info);
new Thread(pro).start();
new Thread(con).start();
}
}

等待和唤醒的操作:

code:

class Info {
private String name = "Carter";
private int age = 25;
private boolean flag=false;
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public synchronized void set(String name, int age) {
if (!flag) {
try {
super.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
this.name = name;
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
this.age = age;
flag = false;
super.notify();
}
public synchronized void get() {
if (flag) {
try {
super.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(this.getName() + " <===================>" + this.getAge());
flag = true;
super.notify();
}
}

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

public void run() {
boolean flag = false;
int i;
for(i=1;i<25;i++) {
if (flag) {
this.info.set("Carter", 20);
flag = false;
} else {
this.info.set("Steven",100);
flag = true;
}
}
}
}

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

public void run() {
int i;
for(i=1; i<25;i++) {
try {
Thread.sleep(100);
} catch(Exception e) {
e.printStackTrace();
}
this.info.get();
}
}
}

public class ThreadTest {
public static void main(String[] args) {
Info info = new Info();
Producer pro = new Producer(info);
Consumer con = new Consumer(info);
new Thread(pro).start();
new Thread(con).start();
}
}

Java 生产者和消费者问题相关推荐

  1. java生产者与消费者问题_java生产者与消费者问题

    为了回忆一下J2SE中的线程互斥与同步问题,所以今天就写个生产者与消费者问题.这个程序大部分时间的结果都基本正确,但某些时候会造成死锁.百思不得其解,将代码贴上,方便以后有更深的体会时再进行修改.也方 ...

  2. kafka学习总结(含java生产者、消费者、Topic操作代码)

    kafka(http://kafka.apache.org)是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率.它的优点是能够直接使用磁盘进行存储.线性读写.速度快,避免了数据在JVM内存和系统内 ...

  3. java多线程 生产者消费者_java多线程之-生产者与消费者

    java多线程之-并发协作[生产者与消费者]模型 对于多线程程序来说,不管c/c++ java python 等任何编程语言,生产者与消费者模型都是最为经典的.也就是可以说多线程的并发协作 对于此模型 ...

  4. Java中生产者与消费者问题的演变

    想要了解更多关于Java生产者消费者问题的演变吗?那就看看这篇文章吧,我们分别用旧方法和新方法来处理这个问题. 生产者消费者问题是一个典型的多进程同步问题. 对于大多数人来说,这个问题可能是我们在学校 ...

  5. Java多线模式-Producer-Consumer模式(生产者、消费者模式)

    1.场景 有些时候需要两个或两个以上的线程协同工作,每个线程需要使用其他线程产生数据. 2.详细说明 可以把上面的场景抽象成生产者和消费者模式.从消费者的角度:消费者需要消费生产者生成的产品. 从生产 ...

  6. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题

    一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...

  7. java的知识点34——线程通信 || 生产者与消费者问题

    线程通信 应用场景:生产者和消费者问题 • 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 • 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待, ...

  8. Java多线程-生产者与消费者

    Java多线程生产者与消费者,准确说应该是"生产者-消费者-仓储"模型,使用了仓储,使得生产者消费者模型就显得更有说服力. 对于此模型,应该明确一下几点: 1.生产者仅仅在仓储未满 ...

  9. java消费者模式_基于Java 生产者消费者模式(详细分析)

    生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...

最新文章

  1. php写一个shell脚本文件格式,一篇文章学会——shell脚本编写
  2. squid,nginx,lighttpd反向代理的区别
  3. Objective-C:Objective-C:文件中一些对目录进行操作的函数
  4. .attr()与.removeAttr()
  5. [Leedcode][JAVA][第16题][最接近的三数之和][双指针][数组]
  6. Python3-笔记-B-003-数据结构-元组tuple( )
  7. 百度网盘挺住!给非会员限速只是为了活下去
  8. http.server模块
  9. 中国兽医牙科X射线发生器市场趋势报告、技术动态创新及市场预测
  10. 冷美人为什么“冷”?
  11. IT Library第4期《备份域升为主域控制器》
  12. 如何在小程序wxml文件中编写js代码
  13. NodeJS对mysql数据库的简单操作
  14. 徐培成电商项目-徐培成-专题视频课程
  15. linux编译n2n v2,在centos下安装n2n服务器
  16. cadence allegro - PCB线路敷铜渲染
  17. CentOS7 分区合并
  18. FPS类游戏的逆向分析通用方法与C++逆向功能开发详解
  19. opencv需要安装mysql吗_OpenCV2.4.3的新特征以及安装方法
  20. python输入中文教程_如何用Python从头开始实现一个中文拼音输入法?

热门文章

  1. matlab非线性回归delta,讲解:Delta-sigma、Matlab、analog-to-digital、MatlabPython|SQ
  2. mysql+地图网格数据下载_echarts 中国各省市 echarts地图数据,含世界地图
  3. linkedlist java 实现_Java LinkedList 实现原理
  4. 计算机专用英语词汇发音,计算机专用的英语词汇
  5. mysql排序由低到高_MySQL入门系列(四)—— 排序查询
  6. django关闭浏览器,怎样清除 cookies 和 session
  7. 自定义过滤器和自定义标签
  8. maven缺少jar包问题
  9. OCJP认证考试复习课-张晨光-专题视频课程
  10. 计算机常用的数制及编码