用ReentrantLock机制实现:分为两个类,FuLockThread 用于实现线程类进行打印操作,FuLockThreadTest 用于生成A,B,C三个线程
import java.io.IOException;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class FuLockThread extends Thread {
private int id;
private static int count = 0;// private int pcount;
private boolean mark = true;
private ReentrantLock lock;
private Condition condition;
public FuLockThread(int id) {
this.id = id;
lock = new ReentrantLock();
condition = lock.newCondition();
}
@Override
public void run() {
// TODO Auto-generated method stub
// 当前的count计数为id值,则进行输出
// 加锁实现
lock.lock();
try {// 加锁实现
while (mark) {
if (count % 3 == id) {
System.out.print(Thread.currentThread().getName());
count++;
pcount++;
condition.signalAll();
if (pcount == 10)
mark = false;
}
}
} finally {
if (count % 3 != id) {
try {
condition.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else
lock.unlock();
}
}
}
public class FuLockThreadTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 加锁实现
new Thread(new FuLockThread(0), "A").start();// 注意线程命名
new Thread(new FuLockThread(1), "B").start();
new Thread(new FuLockThread(2), "C").start();
}
}