Java多執行緒的wait()和notify()例子

瓜瓜東西發表於2014-07-28
示例程式碼2:
  package com.pinfo.test;
  public class ThreadTest {
  /**
  * @param args
  */
  public static void main(String[] args) {
  MyThread myThread = new MyThread();
  //使用Runnable實現類建立執行緒
  Thread t1 = new Thread(myThread);
  //啟動執行緒
  t1.start();
  try {
  //確保執行緒t1先執行
  Thread.sleep(2000);
  } catch (InterruptedException e1) {
  e1.printStackTrace();
  }
  int i = 0;
  //主執行緒使用myThread物件作為監視器
  synchronized(myThread){
  while(++i<=10){
  try {
  Thread.sleep(500);
  System.out.println("The main thread.-->"+i);
  } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  //呼叫監視器的notify()方法喚醒t1執行緒
  myThread.notify();
  }
  }
  }
  class MyThread implements Runnable{
  public void run(){
  int i = 0;
  //使用物件本身this作為監視器(與主執行緒的監視器為同一個物件)
  synchronized(this){
  while(i++<20){
  try {
  Thread.sleep(500);
  System.out.println("The sub thread.-->"+i);
  if(i==10){
  //釋放監視器鎖,阻塞等待...
  this.wait();
  }
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  }
  }
  }
  }


相關文章