多个线程访问同一个资源,进行进程间的通信时,需要使用wait和notify,他们都需要一个同步锁,nofity唤醒的是这个同步锁上出于wait的线程。notify和wait只能在同步代码块中被调用:
class Resources {
private static Resources mRes = null;
private Resources() {
}
public static Resources getInstance() {
if (mRes == null) {
synchronized (Resources.class) {
if (mRes == null) {
mRes = new Resources();
}
}
}
return mRes;
}
private String mName;
private String mSex;
private boolean mFlag = false;
public synchronized void set(String name, String sex) {
if (mFlag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mName = name;
mSex = sex;
mFlag = true;
notify();
}
public synchronized void out() {
if (!mFlag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(mName + ", " + mSex);
mFlag = false;
notify();
}
}