歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java同步機制:synchronized,wait,notify

Java同步機制:synchronized,wait,notify


/**
 * 假設A,B兩個線程同時運行。但A需要某項前置條件必須滿足(data數組裝滿)後才可以正常運轉。 這裡讓B線程去為滿足A的條件去干活。
 */

public class SYN {
 int[] data = new int[100];

 final Object lock = new Object();

 public SYN() {
  new Thread(new A()).start();
  new Thread(new B()).start();
 }

 private class A implements Runnable {
  public void run() {
   /**
    * 因為A需要前置條件(data數據裝滿)必須得到滿足才能運行,所以,在A需要的data數組不滿時,先讓A等待(實際上是等待B。
    * A在等待的同時;B在干活,B裝載data數組)
    */
   synchronized (lock) {
    try {
     System.out.println("A開始等待...");
     lock.wait();
     System.out.println("A結束等待!");

     System.out.println("A前置條件滿足,開始做想做的事...");
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  }
 }

 private class B implements Runnable {
  public void run() {
   synchronized (lock) {
    System.out.println("B開始操作...");
    /**
    * 這裡假設B線程對數組data的數據裝載需要費時的操作(如從網絡下載)。B先於A,把A需要的數據data裝載完畢,然後通知A
    */
    for (int i = 0; i < 100; i++) {
     data[i] = i;

     try {
      Thread.sleep(10);
     } catch (Exception e) {
     }
    }
    System.out.println("B結束操作!");

    lock.notify();
    /** 通知A */
   }
  }
 }

 public static void main(String[] args) {
  new SYN();
 }
}

Copyright © Linux教程網 All Rights Reserved