三个线程交替打印 0-20
利用java里面的Condition来实现
public class ThreadTest2 {
static volatile int a = 0;
public static void main(String[] args) {
Lock lock = new ReentrantLock();
Condition condition1 = lock.newCondition();
Condition condition2 = lock.newCondition();
Condition condition3 = lock.newCondition();
new Thread(() -> {
while (a<=100) {
try {
lock.lock();
System.out.println(Thread.currentThread().getName() + ":" + a++);
condition2.signal();
condition1.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
},"thread 1").start();
new Thread(() -> {
while (a<=100) {
try {
lock.lock();
System.out.println(Thread.currentThread().getName() + ":" + a++);
condition3.signal();
condition2.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
},"thread 2").start();
new Thread(() -> {
while (a<=100) {
try {
lock.lock();
System.out.println(Thread.currentThread().getName() + ":" + a++);
condition1.signal();
condition3.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
},"thread 3").start();
}
}
输出:
thread 1:0
thread 2:1
thread 3:2
thread 1:3
thread 2:4
thread 3:5
thread 1:6
thread 2:7
thread 3:8
thread 1:9
thread 2:10
thread 3:11
thread 1:12
thread 2:13
thread 3:14
thread 1:15
thread 2:16
thread 3:17
thread 1:18
thread 2:19
thread 3:20