传入同一个对象对象pr 和传入不同的对象pr pr1,来当Thread类的构造方法的参数

传入同一个对象对象pr 和传入不同的对象pr pr1,来当Thread类的构造方法的参数

http://img1.sycdn.imooc.com//climg/5d87484609f24e5b12330574.jpghttp://img1.sycdn.imooc.com//climg/5d87486709e4bdc612390531.jpg

如果传入相同的对象pr当Thread类的构造方法的参数

两个线程t1 t2共享一个Runnable中的run方法的代码。

但是传入同一个对象pr当参数时,为什么这句话System.out.println("这是"+i);输出两次?


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,第一张图中,输出“这是x”的语句在循环外边。两个线程共享了10次循环,也就是总共运行10次,但是线程是各自执行。当循环结束后,每个线程都会调用输出“这是x”的代码,所以输出了2次。    

祝:学习愉快~

好帮手慕阿满 2019-09-23 17:14:54

同学你好,这里while循环后没有使用大括号{}将其括起来,所以直至循环结束后才输出“这是11”输入2次是因为两个线程使用一个循环,当循环结束后,每个线程都会输出一次。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 电磁护盾 #1
    最上面那个图 两个线程共享while的10次循环,while循环里的内容 在输出时只打印10次(这10次里每个线程抢了一部分)。 但是为什么这两个线程不共享下面的一个"System.out.println("这是"+i); ",谁抢到就输出谁占有的这句话。导致最后只输出一个 "这是11" ?
    2019-09-23 20:22:35
  • 提问者 电磁护盾 #2
    一个线程也会输出 while循环里的内容10次,和 "这是11" 一次。既然是两个线程共享run方法的代码,那么我觉得两个线程一共也应该 输出while循环里的内容10次,和 "这是11" 一次啊。 就像一个人独享5个蛋糕,然后他把蛋糕吃了,最后这个人总共吃了5个蛋糕。 如果两个人共享五个蛋糕,其中一个人抢了3个,另一个人抢了2个,然后他俩把自己抢到的蛋糕吃了,最后这两个人一共吃的蛋糕数量也是5个。
    2019-09-23 20:32:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师