public class PrintABC {
/**
* @param args
*/
public static void main(String[] args) {
final PringABC p = new PringABC();
//创建3个线程
Thread th1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i<10; i++){
System.out.println("------------------" + i);
p.printA();
}
}
});
th1.start();
Thread th2 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0; i<10; i++){
p.printB();
}
}
});
th2.start();
Thread th3 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0; i<10; i++){
p.printC();
}
}
});
th3.start();
}
}
class PringABC{
private Object a = new Object();
private Object b = new Object();
private Object c = new Object();
//打印A
public void printA(){
synchronized(a){
System.out.println("A");
synchronized(b){
b.notify();
}
try {
a.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//打印B
public void printB(){
synchronized(b){
System.out.println("B");
synchronized(c){
c.notify();
}
try {
b.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//打印C
public void printC(){
synchronized(c){
System.out.println("C");
synchronized(a){
a.notify();
}
try {
c.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果:
------------------0
A
B
C
------------------1
A
B
C
------------------2
A
B
C
------------------3
A
B
C
------------------4
A
B
C
------------------5
A
B
C
------------------6
A
B
C
------------------7
A
B
C
------------------8
A
B
C
------------------9
A
B
C