解题思路:
1.ReentranLock 可重入锁的应用。
2.try {} finally{} 解决,lock.lock() 之后的 lock.unlock()。
try 里面会对当前线程条件判断做业务处理,无论条件成立不成立最终都会释放锁,但 try 里面必须设置一个递增的状态
package com.overcome.thread.demo;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 有序的线程
*/
public class OrderlyThread {
private static Lock lock = new ReentrantLock();
/**
* 递增变量
*/
private static int index = 0;
static class AThread extends Thread {
public void run() {
while (true) {
try {
lock.lock();
while (index % 3 == 0) {
System.out.print("A" + " ");
//进入到下一个顺序线程
index++;
}
} finally {
lock.unlock();
}
}
}
}
static class BThread extends Thread {
public void run() {
while (true) {
try {
lock.lock();
while (index % 3 == 1) {
System.out.print("B" + " ");
//进入到下一个顺序线程
index++;
}
} finally {
lock.unlock();
}
}
}
}
static class CThread extends Thread {
public void run() {
while (true) {
try {
lock.lock();
while (index % 3 == 2) {
System.out.print("C" + " ");
//进入到下一个顺序线程
index++;
}
} finally {
lock.unlock();
}
}
}
}
/** 测试 */
public static void main(String[] args) {
new AThread().start();
new BThread().start();
new CThread().start();
}
}