龙空技术网

阿里面题:三个线程顺序打印XYZ并且打印10遍

Java猿 54

前言:

现在你们对“在java中输入三个整数xyz把这三个数从小到大输出”都比较注意,朋友们都想要剖析一些“在java中输入三个整数xyz把这三个数从小到大输出”的相关内容。那么小编同时在网络上网罗了一些对于“在java中输入三个整数xyz把这三个数从小到大输出””的相关文章,希望看官们能喜欢,小伙伴们快快来学习一下吧!

阿里面题:三个线程顺序打印XYZ

最近参加了阿里的笔试,遇到一个面试题:用三个线程,每个线程各打印一个字符,按照XYZ的顺序打印10遍。

最近加班导致状态不好也没有准备面试的东西,在有限的时间内回答的不是很好。

今天重新又理了理思路,我自己的理解,这个题考察多线程使用和线程间的同步。

第一种实现方式

用最原始的方式实现,定义一个变量,按照XYZ的顺序改变这个共享变量。定义三个线程,每个线程打印一个字符,打印前检查是否应该打印,如果是就打印,并且改变共享变量,让下一个线程打印。

这种没有考虑性能,只是实现了需求,全部代码如下:

第一种实现方式

第二种实现方式

第一种方式明显太占cpu了,如果线程执行时间长肯定浪费了很多资源,我们这次试用等待通知的形式,如果不是自己要打印的字符就让出锁,自己等待被通知,如果是,打印完字符,通知下一个线程。

我用的Lock的Condition,其中的Condition的await是让当前线程等等让出锁,自己加入等待队列,signal方法是通知等待的线程。(也可以用wait和notiy方式实现,原理差不多)

第二种实现方式

如果有更好的实现方式,欢迎留言,一起讨论,谢谢!

标签: #在java中输入三个整数xyz把这三个数从小到大输出 #java多线程顺序打印