龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java 线程入门――线程的同步

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
//可以尝试把下面的要害字synchronized去掉。 public class CubbyHole { private int contents; private boolean available = false; public synchronized int get() { while (available == false) { try { wait(); } catch (InterruptedExcept

  //可以尝试把下面的要害字synchronized去掉。
  
  public class CubbyHole {
  
   private int contents;
  
   private boolean available = false;
  
   public synchronized int get() {
  
   while (available == false) {
  
   try {
  
   wait();
  
   } catch (InterruptedException e) {
  
   }
  
   }
  
   available = false;
  
   notifyAll();
  
   return contents;
  
   }
  
   public synchronized void put(int value) {
  
   while (available == true) {
  
   try {
  
   wait();
  
   } catch (InterruptedException e) {
  
   }
  
   }
  
   contents = value;
  
   available = true;
  
   notifyAll();
  
   }
  
  }
  
  
  
  public class ProdUCer extends Thread {
  
   private CubbyHole cubbyhole;
  
   private int number;
  
  
  
   public Producer(CubbyHole c, int number) {
  
   cubbyhole = c;
  
   this.number = number;
  
   }
  
  
  
   public void run() {
  
   for (int i = 0; i < 10; i++) {
  
   cubbyhole.put(i);
  
   System.out.println("Producer #" + this.number + " put: " + i);
  
   try {
  
   sleep((int) (Math.random() * 100));
  
   } catch (InterruptedException e) {
  
   }
  
   }
  
   }
  
  }
  
  
  
  public class Consumer extends Thread {
  
   private CubbyHole cubbyhole;
  
   private int number;
  
  
  
   public Consumer(CubbyHole c, int number) {
  
   cubbyhole = c;
  
   this.number = number;
  
   }
  
  
  
   public void run() {
  
   int value = 0;
  
   for (int i = 0; i < 10; i++) {
  
   value = cubbyhole.get();
  
   System.out.println("Consumer #" + this.number + " got: " + value);
  
   }
  
   }
  
  }
  
  
  
  public class ProducerConsumerTest {
  
   public static void main(String[] args) {
  
   CubbyHole c = new CubbyHole();
  
   Producer p1 = new Producer(c, 1);
  
   Consumer c1 = new Consumer(c, 1);
  
精彩图集

赞助商链接