线程同步问题
要用到共同数据(包括同步锁)或共同算法的若干个方法应该归在同一个类身上,这种设计正好体现了高类聚合程序的健壮性
锁是在代表要操作的资源的类的内部方法中,而不是现成代码中。
为了防止伪唤醒、判断条件是应采用while 而非 if 让程序的健壮性更加体现出来如:
class Busines {
private boolean bShoudsub = true;
public synchronized void sub(int i) {
while (!bShoudsub) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int j = 1; j <= 10; j++) {
System.out.println("sub thread sequece of " + j + ",loop of " + i);
}
bShoudsub = false;
this.notify();
}
public synchronized void main(int i) {
while (bShoudsub) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int j = 1; j <= 100; j++) {
System.out.println("main thread sequece of " + j + ",loop of " + i);
}
bShoudsub = true;
this.notify();
}