线程---生产者与消费者
来源:互联网 发布:桌面dock软件 编辑:程序博客网 时间:2024/05/22 09:07
public class Demo {public static void main(String[] args) {Info i = new Info();Producer p = new Producer(i);Consumer c = new Consumer(i);new Thread(p).start();new Thread(c).start();}}
public class Producer implements Runnable {private Info info = null;public Producer(Info info){this.info = info;}public void run(){boolean flag = false;for(int i=0;i<50;i++){if(flag){this.info.setName("谢永明");try {Thread.sleep(90);} catch (InterruptedException e) {e.printStackTrace();}this.info.setContent("学生");flag = false;}else{this.info.setName("xym");try {Thread.sleep(90);} catch (InterruptedException e){e.printStackTrace();}this.info.setContent("www.xym.com");public class Consumer implements Runnable{private Info info = null;public Consumer(Info info){this.info = info;}public void run() {for(int i=0;i<50;i++){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(this.info.getName() + "-->" + this.info.getContent());}}}public class Demo {public static void main(String[] args) {Info i = new Info();Producer p = new Producer(i);Consumer c = new Consumer(i);new Thread(p).start();new Thread(c).start();}}输出结果:
谢永明-->www.xym.com
xym-->学生
谢永明-->www.xym.com
xym-->学生
谢永明-->www.xym.com
xym-->学生
谢永明-->www.xym.com
xym-->学生
xym-->学生
谢永明-->www.xym.com
xym-->学生
谢永明-->www.xym.com
xym-->学生谢永明-->www.xym.com
问题解决1 ---假如同步:
public class Info {private String name = "谢永明";//指定默认值private String content = "学生";//指定默认值public synchronized void set(String name,String content){this.setName(name);try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}this.setContent(content);}public synchronized void get(){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(this.getName() + "-->" + this.getContent());}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 class Producer implements Runnable {private Info info = null;public Producer(Info info){this.info = info;}public void run(){boolean flag = false;for(int i=0;i<50;i++){if(flag){this.info.set("xym", "www.xym.com");flag = false;}else{this.info.set("谢永明", "学生");flag = true;}}}}public class Consumer implements Runnable{private Info info = null;public Consumer(Info info){this.info = info;}public void run() {for(int i=0;i<50;i++){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}this.info.get();}}}public class Demo {public static void main(String[] args) {Info i = new Info();Producer p = new Producer(i);Consumer c = new Consumer(i);new Thread(p).start();new Thread(c).start();}}
输出结果:谢永明-->学生
xym-->www.xym.com
xym-->www.xym.com
xym-->www.xym.com
谢永明-->学生
xym-->www.xym.com
谢永明-->学生
xym-->www.xym.com
xym-->www.xym.com
谢永明-->学生
问题解决2---加入等待与唤醒:
public class Info {private String name = "谢永明";//指定默认值private String content = "学生";//指定默认值private boolean flag = false;public synchronized void set(String name,String content){if(!flag){try {super.wait(); //等待消费者取走} catch (InterruptedException e) {e.printStackTrace();}}this.setName(name);try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}this.setContent(content);flag = false;super.notify(); //唤醒等待线程}public synchronized void get(){if(flag){try {super.wait(); //等待生产者生产} catch (InterruptedException e) {e.printStackTrace();}}try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(this.getName() + "-->" + this.getContent());flag = true;super.notify();}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;}}
- 线程生产者与消费者
- 线程---生产者与消费者
- 线程(消费者与生产者)
- java线程 生产者与消费者
- java线程 生产者与消费者
- 线程锁,生产者与消费者
- 线程(三)线程协作生产者与消费者
- 同步线程--生产者与消费者模式
- Windows线程(生产者与消费者问题)
- java线程模拟生产者与消费者
- 生产者与消费者 java经典线程法
- 消费者与生产者线程同步程序
- JAVA线程(生产者与消费者)
- Windows线程(生产者与消费者问题)
- 线程同步(消费者与生产者)
- JAVA 线程间通信 - 生产者与消费者
- 线程经典,生产者与消费者问题
- C#生产者与消费者问题 线程同步
- hdu2612Find a way(dbfs或者IDA*)
- JavaSE 拾遗(13)——JavaSE 网络编程
- POj 1061 青蛙的约会
- ubuntu12.10下arm-linux-gcc交叉编译环境的搭建
- java中没有引用传递
- 线程---生产者与消费者
- 黑马程序员_集合框架(List,Set)
- 利用单例对hibernate进行优化成模板
- JDK1.5 静态导入
- DDR内存 时序指南
- 地大邀请赛d
- Android标题栏各种设置
- CMD命令积累(一)
- android json 解析 简单示例