java多线程经典的生产者消费者问题
2016-08-09 09:58
579 查看
import java.io.*; import java.lang.*; import java.util.*; public class hehe { public static void main(String[] args){ Stack1 s= new Stack1(); Pruducer p= new Pruducer(s); Consumer c = new Consumer(s); new Thread(p).start(); new Thread(c).start(); } } public class Stack1 { Wutou[] arr = new Wutou[6]; int index = 0; public synchronized void push (Wutou wt){ while(index == arr.length){//不用if的原因是可能异常会打断 try{ this.wait();//当前的对象访问的线程wait }catch(InterruptedException e){ e.printStackTrace(); ; } } this.notifyAll(); arr[index++] = wt; } public synchronized Wutou pop(){ while(index == 0){ try{ this.wait();//当前的对象访问的线程wait }catch(InterruptedException ee){ ee.printStackTrace(); } } this.notifyAll();//叫醒一个线程继续执行 return arr[--index]; } } public class Wutou{ int id; public Wutou(int id1){ id = id1; } public String toString(){ return "Wutou:"+ id; } } public class Pruducer implements Runnable { Stack1 ss = null; Pruducer (Stack1 ss){ this.ss = ss; } public void run(){ for(int i = 0;i < 20;++ i){ Wutou w = new Wutou(i); ss.push(w); System.out.println("生产了:"+w); try { Thread.sleep(2000); }catch(InterruptedException e){ return ; } } } } public class Consumer implements Runnable{ Stack1 ss =null; Consumer(Stack1 ss){ this.ss =ss ; } public void run(){ for(int i = 0;i < 20;++ i ){ Wutou w = new Wutou(i); ss.pop(); System.out.println("消费了:"+w); try { Thread.sleep(2000); }catch(InterruptedException e){ e.printStackTrace(); } } } }
相关文章推荐
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- 多线程经典问题之生产者消费者问题的JAVA实现
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java多线程-生产者消费者经典问题 基于BlockingQueue
- java 多线程经典例子——生产者与消费者的问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者和消费者经典问题案例
- 多线程经典案例——生产者/消费者问题的Java实现与详解
- java多线程实现生产者与消费者---经典问题
- java多线程之生产者消费者经典问题
- java例程练习(多线程综合练习[生产者-消费者问题])
- 用JAVA实现多线程(生产者与消费者问题)
- java例程练习(多线程综合练习[生产者-消费者问题])
- 继续java多线程——生产者消费者类似问题