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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/244cbb6b4da04440c6db3d83ea2f8281.html