package com.heima.Thread;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class Demo3_ReenTrantLock {
/**
* @param args
*/
public static void main(String[] args) {
final Printer3 p3 = new Printer3();
new Thread() {
public void run() {
while(true) {
try {
p3.print1();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
public void run() {
while(true) {
try {
p3.print2();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
public void run() {
while(true) {
try {
p3.print3();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
//交替执行间隔输出
class Printer3 {
private ReentrantLock r = new ReentrantLock();
private Condition c1 = r.newCondition();
private Condition c2 = r.newCondition();
private Condition c3 = r.newCondition();
int flag = 1;
public void print1() throws InterruptedException {
r.lock(); // 获取锁
if(flag != 1) {
c1.await();
}
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
System.out.println("5");
System.out.println("\r\n");
flag=2;
//this.notify(); // 随机唤醒单个等待的线程
c2.signal();
r.unlock(); // 释放锁
}
public void print2() throws InterruptedException {
r.lock();
if(flag != 2) {
c2.await();
}
System.out.println("6");
System.out.println("7");
System.out.println("8");
System.out.println("9");
System.out.println("10");
System.out.println("\r\n");
flag = 3 ;
//this.notify();
c3.signal();
r.unlock();
}
public void print3() throws InterruptedException {
r.lock();
while(flag != 3) {
c3.await();
}
System.out.println("11");
System.out.println("12");
System.out.println("13");
System.out.println("14");
System.out.println("15");
System.out.println("\r\n");
flag = 1 ;
//this.notify();
c1.signal();
r.unlock();
}
}