一、前段时间面试被问到了线程的yeild方法和sleep方法的区别,很遗憾没能回答出个所以然,只能简单的说下,两者都会使得调用的线程停止,然后sleep可以设置固定的时间,yeild则没有。一阵尴尬,后面给了点提示说到了线程的优先级,但是还是不知道,,,,。
二、后面自己总结了一下原因,首先yeild方法用的太少,第一印象只停留在可以使线程停掉,更多用到的还是sleep,没有去比较两者两者的差别。再一个肯定就是学艺不精了,害。
三、记录一下现在对两者的区别的理解:
1、sleep方法:sleep方法有一个或者两个参数,可以指定一个毫秒数或一个毫秒数一个纳秒数来使得调用线程暂时停止执行,进入阻塞状态;sleep方法是静态方法,可以通过Thread直接调用,线程睡眠时间到了后会自动再次恢复运行,再一个就是sleep方法调用会抛出一个InterruptedException。
2、yeild方法:可以确定的第一点这个方法没有参数,是静态方法,可以使得调用的线程进入就绪状态,最重要的一点就是会允许其他优先级较自己高的线程或同等优先级的线程进入运行,但是系统也可能忽略这个,同时不会抛出异常。感觉就像是给别的同级别的线程让路,但是自身线程在后续处理器的调用中还是可以再次被调用运行。大概就是yeild之后,当前运行线程又和其他线程处于同一起跑线,再次抽奖抢夺被cpu调度的机会。
3、写到这里其实两者的区别已经显而易见了,
四、值得一提的是还有个Object类的wait()方法以及一个线程的join()方法在这里就不做阐述了
五、加油吧,如有不足请指正