run共享

run共享

老师我想问一下

为什么 Runnable中的run方法是共享的

而Thread中的run方法就不是共享的呢

正在回答 回答被采纳积分+1

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

2回答
好帮手慕小尤 2020-12-22 13:55:24

同学你好,如本课程中的案例,

http://img1.sycdn.imooc.com//climg/5fe18a48098aaae714420598.jpg

    ​在run方法中定义int i变量,是局部变量,当运行线程时,就会每个run方法生成一个变量,进行循环累加,所以每个线程会执行10次;而在run外定义int i变量,是公共变量,几个run方法共用一个变量,进行累加,两个线程总共执行10次。
好帮手慕小尤 2020-12-21 18:46:37

同学你好,因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。

    一个任务可以启动多个线程​,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。

    ​可以理解为,Thread实现线程是不同的对象来运行run()方法,不同对象,自然无法共享变量。而Runnable方式实现的线程是同一个对象运行run()方法,所以可以实现共享变量。

  • 提问者 一娆Hacker #1

    Runnable只能多个对象共享一个run吗?

    好像这能这样。。。 那这样会不会造成Runnable有局限性呢 有些场景适用不了

    2020-12-21 20:15:12
  • 好帮手慕小尤 回复 提问者 一娆Hacker #2

    同学你好,Runnable并不是多个对象共享一个run方法,不同的对象调用的是不同的run方法。而是通过Runnable方式实现的线程,是同一个对象共享一个run方法从而实现数据共享。也就说如果每个线程执行的代码相同,可以使用同一个runnable对象,这个Runnable对象中有那个共享数据。

    祝学习愉快!

    2020-12-22 09:58:08
  • 提问者 一娆Hacker 回复 好帮手慕小尤 #3

    http://img1.sycdn.imooc.com//climg/5fe15e80090a886a06400058.jpg

    可以举例子说明一下吗 大概懂了 还是有点模糊

    2020-12-22 10:48:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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