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