要求是 3 个线程按顺序打印 abcabc
代码如下:
public class ThreadPrint {
static int sign = 0;
static ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
new Thread(()->{
for (int i = 0; i < 5; ) {
lock.lock();
if (sign % 3 == 0){
System.out.print("a");
sign++;
i++;
}
lock.unlock();
}
}).start();
new Thread(()->{
for (int i = 0; i < 5;) {
lock.lock();
if (sign % 3 == 1){
System.out.print("b");
sign++;
i++;
}
lock.unlock();
}
}).start();
new Thread(()->{
for (int i = 0; i < 5; ) {
lock.lock();
if (sign % 3 == 2){
System.out.print("c");
sign++;
i++;
}
lock.unlock();
}
}).start();
}
}
为什么这能按照顺序打印出来呢?
第一个线程 unlock 之后为什么不能 for 循环继续 lock 呢?
继续 lock 的话就不能打印出 5 个 a 了。
然而打印结果是 5 个按顺序的 abc