下面这个类负责打印 A B C
class PrintABCOneLock{
Object o = new Object();
private int i = 1;
public synchronized void printA(){
while(i!=1){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("A");
i ++;
this.notifyAll();
}
public synchronized void printB(){
while(i!=2){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("B");
i ++;
this.notifyAll();
}
public synchronized void printC(){
while(i!=3){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("C");
i ++;
if(i == 4){
i =1;
}
this.notifyAll();
}
}
测试类
public class PrintABC {
/**
* @param args
*/
public static void main(String[] args) {
final PrintABCOneLock p = new PrintABCOneLock();
new Thread(new Runnable(){
@Override
public void run() {
for(int i = 0; i< 50;i++){
p.printA();
}
}}).start();
new Thread(new Runnable(){
@Override
public void run() {
for(int i = 0; i< 50;i++){
p.printB();
}
}}).start();
new Thread(new Runnable(){
@Override
public void run() {
for(int i = 0; i< 50;i++){
p.printC();
}
}}).start();
}
}
运行结果:
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C