要求是 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.