java每日一练(19_03_15)

//

名人名言

//

昨日翻译

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 ̄)づ╭❤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值