//
名人名言
//
昨日翻译
Do not teach fish to swim.
不要班门弄斧。
今日名言
East or west, home is the best.
//
2019.03.14问题及解析
//
public class ThreadTest {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("小");
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("刀");
}
}
(可左右滑动哦)
1.请问上述程序的执行结果为:
A.小刀
B.刀小
C.可能为小刀,也可能为刀小
D.以上答案均不正确
2.为什么?
答案与解析
源码分析
大家都有了一定基础了,以后基础类和main函数不存在复杂定义的情况就不再赘述,首先代码通过lambda表达式创建了一个线程并且调用了它的sleep(2000)方法传递了2000作为参数,并且进行了异常的捕获,完成之后输出“小”;然后调用了线程thread的start方法,之后又调用了thread的join方法,进行异常的捕获,最后输出“刀”。
相关知识点
thread中的方法,首先我们要明白thread.start()方法,当我们调用thread.start()方法之后,我们的线程才会开启,可以看API文档中的相关描述:Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.也就是说start方法能够使我们的线程开始执行,java虚拟机调用这个线程的run方法。
之后才调用到我们的thread.sleep(2000)方法,再次查看我们API中的描述Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.使当前线程休眠(暂时中止执行)指定的毫秒,以系统的计时器和调度器的准确和精度为准。也就是这里我们会使我们的thread线程休眠2秒
调用start方法后调用了join方法,再次查询我们的API,Waits for this thread to die.等待当前线程死亡。也就是调用了这个方法之后,我们的程序会等待当前线程死亡之后才调用之后的程序。那么因为我们开启了thread线程之后,使它进行了休眠,所以我们此时需要等待thread线程醒来之后,完成他的打印才会进行之后的打印,因此我们的程序最终一定会输出“小刀”。因此答案选A。
大家如果想要更好的来理解这个问题,大家还可以把sleep方法和join方法进行一些注释或者修改,这样才能更好的理解这两个方法给我们线程运行带来的便利。
惯例表扬
今天表扬一下无言唯笑,希望小伙伴们都能坚持学习,坚持打卡哦~今天的题目也很有趣,要不要来看一眼~
//
2019.03.15问题
//
public class Threads {
public static void main(String[] args) {
char[] chars = {'小','刀','哥'};
Thread[] threads = new Thread[3];
for(int i = 0; i < 3; i++){
threads[i] = new Thread(()->{
for (char character : chars) {
System.out.print(character);
}
System.out.print('\t');
});
}
for(Thread thread : threads){
thread.start();
}
}
}
(可左右滑动哦)
请问上述程序执行后,哪个选项的输出可能发生?
A.小刀小刀 小刀哥 哥哥
B.小刀小 刀哥 小刀哥
C.小刀 哥小刀哥小刀哥
D.小小刀刀哥哥 小刀哥
E.刀哥小 小刀哥 小刀哥
F.哥刀小 哥刀小 哥刀小
G.小刀哥 刀哥小 哥刀小
你能从程序执行的逻辑中找到线程可能发生冲突结果的规律吗?
能想到答案吗?记得留言打卡,分享学到的知识,顺便点一个好看哦
//
往期回顾
//
java每日一练(19_03_14) (程序的执行结果)
java每日一练(19_03_13) (pom.xml文件)
java每日一练(19_03_12) (输出结果)
java每日一练(19_03_11) (程序的输出结果)
java每日一练(19_03_10) (程序题 三个问题)
java每日一练(19_03_09) (程序的输出结果)
java每日一练(19_03_08) (程序题 异常 输出)
//
提升自己
//
听到很多小伙伴问小刀哥有什么书推荐看的,看视频也好,看书也罢,能学到知识就行了。但是小刀还是推荐大家多看书,多动脑筋思考。现在小刀给大家带福利啦,扫描下方二维码就能获得福利,价格都比某宝某东便宜哦!!而且全都包邮哦!!
//
加入我们吧~
//
眼过千遍,不如手过一遍,一定一定要把自己的想法写出来(想法不论对错,写你所想就是进步),这样才会有所收获,你的每一个留言和分享小刀都会认真回复,彼此学习共同进步~
小刀和小伙伴在学习群里等你来一起监督学习哦,坚持!加油!进群请加小刀微信: best396975802
感谢所有在后台留言的小伙伴们,每一分的付出都会收到回报,你们都是最棒的哦!
END
微信群请点击公众号菜单进微信群
文字|天堂
排版|花音
点个好看再走吧~(づ ̄3 ̄)づ╭❤