public class LockTest2{
public static void main(String[] args) {
Out1 out = new Out1();
new Thread() {
@Override
public void run() {
while(true) {
try {
out.out1();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
@Override
public void run() {
while(true) {
try {
out.out2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
@Override
public void run() {
while(true) {
try {
out.out3();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
}
class Out1{
ReentrantLock lock = new ReentrantLock();
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();
int flag = 1;
//线程1
public void out1() throws Exception {
lock.lock();//获取锁
if(flag!=1) {
c1.await();
}
System.out.print("hello ");
System.out.print("world");
System.out.print("!");
System.out.println("\r\n");
flag = 2;
c2.signal();
lock.unlock();//释放锁资源
}
public void out2() throws InterruptedException {
lock.lock();//获取锁
if(flag!=2) {
c2.await();
}
System.out.print("快乐");
System.out.print("Java");
System.out.print("!");
System.out.println("\r\n");
flag = 3;
c3.signal();
lock.unlock();//释放锁资源
}
public void out3() throws InterruptedException {
lock.lock();//获取锁
if(flag!=3) {
c3.await();
}
System.out.print("谁");
System.out.print("是");
System.out.print("废");
System.out.print("物");
System.out.print("?");
System.out.println("\r\n");
flag = 1;
c1.signal();//唤醒指定线程
lock.unlock();//释放锁资源
}
}