似乎是一道经典面试题?实现方法很多,最近用了下java5的并发包,感觉挺好用的,写一个试试。。。
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadPrint implements Runnable
{
private static String startName = "A";
Lock lock = null;
String name = null;
int iCount = 0;
Condition condition = null;
Condition nextCondition = null;
String nextName = null;
public ThreadPrint(String name, String nextName, Lock lock,
Condition thisCondition, Condition nextCondition)
{
this.name = name;
this.nextName = nextName;
this.lock = lock;
this.condition = thisCondition;
this.nextCondition = nextCondition;
}
@Override
public void run()
{
lock.lock();
try
{
while (iCount++ < 10)
{
while (!startName.equals(this.name))
{
this.condition.await();
}
System.out.print(this.name);
startName = nextName;
nextCondition.signal();
}
} catch (InterruptedException e)
{
e.printStackTrace();
} finally
{
lock.unlock();
}
}
public static void main(String args[])
{
Lock lock = new ReentrantLock();
Condition a = lock.newCondition();
Condition b = lock.newCondition();
Condition c = lock.newCondition();
new Thread(new ThreadPrint("A", "B", lock, a, b)).start();
new Thread(new ThreadPrint("B", "C", lock, b, c)).start();
new Thread(new ThreadPrint("C", "A", lock, c, a)).start();
}
}