我认为这个问题最关键的点在于:如何保证线程之间的通讯问题。只要保证这个,就相当于很多人排着队来买东西一样,有条不紊。
进入正题:
条件:三个线程,依次打印1,2,3,4,5.。。。90
我是使用Condition实现的,使用wait()和notify()也可以。
public class Test {
private static Lock lock = new ReentrantLock();
private static Condition condition1 = lock.newCondition();
private static Condition condition2 = lock.newCondition();
private static Condition condition3 = lock.newCondition();
private static final Integer max = 90;
private static Integer count = 1;
public static void main(String[] args) {
new Thread("t1"){
@Override
public void run() {
outputCount(condition2,condition1);
}
}.start();
new Thread("t2"){
@Override
public void run() {
outputCount(condition3,condition2);
}
}.start();
new Thread("t3"){
@Override
public void run() {
outputCount(condition1,condition3);
}
}.start();
}
private void outputCount(Condition conditionA,Condition conditionB){
lock.lock();
try {
for (int i = 0; i < max; i++) {
if (count <= max){
System.out.println(Thread.currentThread().getName()+ " : "+count);
++count;
conditionA.signal();
conditionB.await();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
最终打印的结果:
新人博主,轻喷。
有问题欢迎留言评论。