java每日一练(19_03_16)

//

名人名言

//

昨日翻译

East or west, home is the best. 

东奔西跑,还是家里最好。

今日名言

Experience is the best teacher.

//

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.小刀哥    刀哥小    哥刀小

你能从程序执行的逻辑中找到线程可能发生冲突结果的规律吗?

答案与解析

源码分析

首先声明了一个字符数组,存放了三个字符‘小’、‘刀’、‘哥’。

然后声明了一个线程数组,并且分配了三个数组空间。

进行了三次循环,每次循环为数组的一个空间初始化并且重写run()方法。

run()方法中遍历输出字符数组中的内容,在输出完毕之后输出'\t'。

for循环遍历线程数组,依次开启调用三个数组空间中的start方法。

题目关键

首先是数组,之前的题目好像都没太涉及过数组,因此不会用数组的小伙伴一定要好好借这个机会把数组学习一下,数组我们可以通过大括号将初始值直接用“,”隔开的方式直接为我们的数组赋初始值,也可以通过首先声明数组空间,之后再通过遍历的方式依次给数组赋值。取值的时候通过数组标识符[想取值位置-1]的方式进行取值,因为数组的起始下标为0。

然后是'\t',java中有很多的转义字符,通过\加相应字符来表示,大家可以百度了解学习,这里'\t'的意思是一个水平制表符,效果就等同于我们在编辑文字时使用键盘上的"tab"键的效果。关于其它的转义字符有兴趣的小伙伴们也可以去学习之后一起分享给大家。那么我们程序这里也就是通过转义字符的方式输出了水平制表符。也就是在每个线程遍历我们的字符后输出一个水平制表符。

那么之前我们也稍微接触过多线程在不加锁的情况会发生执行冲突的问题,那么我们这里同样并没有任何的加锁操作,因此会发生执行冲突。如果按照最正常的无冲突的执行,那么我们的运算结果会是:

小刀哥 小刀哥 小刀哥

但是答案中并没有,我们能否通过代码的分析找出冲突可能出现的规律呢?答案是可以的。

首先我们的每一个线程都会答应小刀哥三个字符,并且打印完成后会输出一个制表符。

那么第一点,只有在打印过‘哥’字符之后,才有可能输出制表符。

所以ABC答案错误。

第二点,每个线程都会顺序输出小刀哥,也就是说刀永远只会在前面输出过小的情况输出,哥只会在前面输出过刀的情况输出,前面如果只输过一个小,那后面就不会出现两个刀。

因此EFG错误,并且D选项符合输出规律。

//

2019.03.16问题

//

    又到了我们两天一循环的web问题了,大家加油!

那么我们上次web主要学习了pom.xml和maven相关的内容,这次我们就继续上次的内容继续深入,通过maven我们获得了最简单的springboot框架

那么请问我们如何通过已有的springboot框架构建一个最简单的helloworld的web程序呢?其中用到的内容都有哪些?

(参考教程:https://spring.io/guides/gs/rest-service/)

希望大家能分享自己执行的结果与相关的知识收获!

//

往期回顾

//

java每日一练(19_03_15)        (多线程问题)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值