Java中线程的高级应用
2010-10-05 01:23:09 来源:WEB开发网核心提示:实例2:(线程与线程之间通讯):问题:生产者线程产生数据,消费者线程获得数据并显示其值(消费它)import java.io.*;import java.applet.*;class Producer extends Thread //生产者线程{ private Box box; public Producer(B
实例2:(线程与线程之间通讯):
问题:生产者线程产生数据,消费者线程获得数据并显示其值(消费它)
import java.io.*; import java.applet.*; class Producer extends Thread //生产者线程 { private Box box; public Producer(Box box) { this.box=box; } public void run() { for(int i=0;i<10;i++) { box.put(i); //产生数据 System.out.println("Producer put:"+i); try { sleep((int)(Math.random()*100)); } catch(InterruptedException e) { } } } } class Consumer extends Thread //消费者线程 { private Box box; public Consumer(Box box) { this.box=box; } public void run() { int value; for(int i=0;i<10;i++) { value=box.get(); //获得数据并显示其值 System.out.println("Consumer got:"+value); } } } class Box //共用类并提供get()、put()方法 { private int contents; private boolean isAvailable=false; //定义一个标置变量 public synchronized int get() //同步方法 { while(isAvailable ==false) { try //等待生产者生产出新的数字(等待生产者释放监视器) { wait(); }catch(InterruptedException e) { } } isAvailable=false; //设置消费数字完毕标置 notify(); //释放监视器 return contents; } public synchronized void put(int value) { while(isAvailable ==true) //等待消费者获得新的数字(等待消费者释放监视器) { try { wait(); }catch(InterruptedException e) { } } contents=value; isAvailable=true; //设置生产数字完毕标置 notify(); //释放监视器 } } public class PrdCons //main()所在的类 { public static void main(String args[]) { Box b=new Box(); Producer p=new Producer(b); //产生生产者、消费者线程 Consumer c=new Consumer(b); p.start(); //启动生产者、消费者线程 c.start(); } }
更多精彩
赞助商链接