Java多线程的单生产单消费和多生产多消费问题的解决
2014-05-04 10:19
330 查看
单生产单消费:
/* 生产者和消费者:等待唤醒机制 */ class Resource { //定义一个商品的名字 private String name; private int count=1; private boolean flag; public synchronized void set(String name) { if(flag) try{wait();}catch(Exception e){} this.name=name+"-----"+count; count++; System.out.println(Thread.currentThread().getName()+"生产了..."+this.name); flag=true; notify(); } public synchronized void get() { synchronized(this) { if(!flag) try{wait();}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"消费了..."+this.name); flag=false; notify(); } } } //定义生产者的任务 class Producer implements Runnable { private Resource r; Producer(Resource r) { this.r=r; } public void run() { while(true) { r.set("蛋糕"); } } } class Consumer implements Runnable { private Resource r; Consumer(Resource r) { this.r=r; } public void run() { while(true) { r.get(); } } } class ThreadDemo_Producer_Consumer { public static void main(String[] args) { Resource r=new Resource(); Producer p=new Producer(r); Consumer c=new Consumer(r); Thread t1=new Thread(p); Thread t2=new Thread(c); t1.start(); t2.start(); } }多生产多消费:
/* 多生产者和多消费者:等待唤醒机制 */ class Resource { //定义一个商品的名字 private String name; private int count=1; private boolean flag; public synchronized void set(String name) { while(flag) try{wait();}catch(Exception e){} this.name=name+"-----"+count; count++; System.out.println(Thread.currentThread().getName()+"生产了..."+this.name); flag=true; notifyAll(); } public synchronized void get() { while(!flag) try{wait();}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"消费了..."+this.name); flag=false; notifyAll(); } } //定义生产者的任务 class Producer implements Runnable { private Resource r; Producer(Resource r) { this.r=r; } public void run() { while(true) { r.set("蛋糕"); } } } class Consumer implements Runnable { private Resource r; Consumer(Resource r) { this.r=r; } public void run() { while(true) { r.get(); } } } class ThreadDemo_Producer_Consumer2 { public static void main(String[] args) { Resource r=new Resource(); Producer p=new Producer(r); Consumer c=new Consumer(r); Thread t1=new Thread(p); Thread t2=new Thread(c); Thread t3=new Thread(p); Thread t4=new Thread(c); t1.start(); t2.start(); t3.start(); t4.start(); } }
相关文章推荐
- java信号量解决生产消费问题
- java多线程之生产消费问题
- Java中多线程的多生产多消费问题的解决方案
- Java 多线程间通信 多生产 多消费问题
- 多线程多生产多消费问题以及解决
- Java多线程系列--“基础篇”11之 生产消费者问题
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- Java学习笔记45(多线程二:安全问题以及解决原理)
- 转:java多线程小结,及解决应用挂死的问题
- Java模拟生产消费问题
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)
- 多线程死锁问题分析和解决[java]
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。
- 【JAVA之多线程】7.生产消费示例
- java 多线程系列基础篇(十一)之生产消费者问题
- java多线程的同步 通信以及生产消费者问题
- javah 生产头文件问题解决 亲自试验,费了2天时间就解决这个问题
- 多线程中多生产多消费问题
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁