试试,阿里 P7 的笔试题:多线程按序打印如何实现?
下面是阿里 P7 的一道笔试题
1、题目
编写一个程序,开启 3 个线程,这 3 个线程的 ID 分别为 A、B、C,3 个线程交替打印 1-100 的整数,样例 Sample:
大家可以先思考一下,试试看看能否实现?
2、解题思路
题目中要求 3 个线程启动之后,需要按顺序一个接着一个来执行,重点是 3 个线程都处于运行状态,如何能让他们按顺序来打印?
大家可以把 3 个线程想象为 3 个人(ABC),ABC 3 个人手拉手组成一个环,然后 3 个人都坐那等通知,等谁的通知呢,等待上一个人的通知,B 等待 A 的通知,C 等待 B 的通知,A 等待 C 的通知。
刚开始:程序先唤起 A,A 打印之后,通知 B,然后 A 进入休眠等待唤醒通知,此时轮到 B 打印了,B 打印之后通知 C,B 进入休眠等待唤醒通知,此时轮到 C 打印了,C 打印之后通知 A,C 进入休眠等待唤醒通知,通过这种方式来实现,每个线程打印之后,负责唤醒下一个线程,然后自己进入休眠状态。
关键技术点有 2 个:
1、阻塞线程
2、唤起线程
java.util.concurrent.locks.LockSupport类刚好提供了 2 个静态方法支持这些操作
1、park():让当前线程阻塞
2、unpark(Thread thread):用来唤起阻塞中的线程
3、答案
代码相当简单。
推荐阅读
为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我懂了
看完三件事❤️
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 Java斗帝 』,不定期分享原创知识。
同时可以期待后续文章ing🚀
评论