WEB开发网
开发学院软件开发Java Java中线程的高级应用 阅读

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();
 }
}

上一页  1 2 3 4 5 6  下一页

Tags:线程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接