前言:
现在你们对“在java中输入三个整数xyz把这三个数从小到大输出”都比较注意,朋友们都想要剖析一些“在java中输入三个整数xyz把这三个数从小到大输出”的相关内容。那么小编同时在网络上网罗了一些对于“在java中输入三个整数xyz把这三个数从小到大输出””的相关文章,希望看官们能喜欢,小伙伴们快快来学习一下吧!最近参加了阿里的笔试,遇到一个面试题:用三个线程,每个线程各打印一个字符,按照XYZ的顺序打印10遍。
最近加班导致状态不好也没有准备面试的东西,在有限的时间内回答的不是很好。
今天重新又理了理思路,我自己的理解,这个题考察多线程使用和线程间的同步。
第一种实现方式
用最原始的方式实现,定义一个变量,按照XYZ的顺序改变这个共享变量。定义三个线程,每个线程打印一个字符,打印前检查是否应该打印,如果是就打印,并且改变共享变量,让下一个线程打印。
这种没有考虑性能,只是实现了需求,全部代码如下:
第二种实现方式
第一种方式明显太占cpu了,如果线程执行时间长肯定浪费了很多资源,我们这次试用等待通知的形式,如果不是自己要打印的字符就让出锁,自己等待被通知,如果是,打印完字符,通知下一个线程。
我用的Lock的Condition,其中的Condition的await是让当前线程等等让出锁,自己加入等待队列,signal方法是通知等待的线程。(也可以用wait和notiy方式实现,原理差不多)
如果有更好的实现方式,欢迎留言,一起讨论,谢谢!