JAVA 继承Thread 实现多线程 资源不共享? 请保持清醒 。

4 篇文章 1 订阅

 前排我先说结论:

继承Thread 实现多线程  ,

是  ‘ 不 易 ’ 实现 资源共享 (甚至不易我都加了符号的),

而不是   不能实现资源共享 !!!

看看现在网上的有些文章 (包括一些所谓的面试宝典,文字简短但是害人不浅),随便截一些图: 

 

 然后类似的例子 演示大致如下 ,写了个卖瓜例子:

咋一看好像确实是资源不共享 。 

真的吗,显然是代码写的问题。 

1、 private int watermelon=10;  瓜 数 是类的 一个 私有变量 。

2、  new了 两个 卖瓜的摊子, 每个摊子 都有 自己的10个瓜 。

 new TestThread().start();
 new TestThread().start();

每个线程自己卖自己的瓜, 本来就是 每个摊子 10个瓜 ,这是超卖? 这是资源不共享问题? 

这么写,明摆着不就是不同资源不同执行么,何来所谓的资源共享问题? 

现在看看,我把调用的实现代码写成这样:

        TestThread testThread=new TestThread();
        
        new Thread(testThread).start();
        new Thread(testThread).start();

 运行结果,是不是就共享了 :

这样存在的问题就是 ,需要考虑线程并发带来的 数据同步问题 :

多运行几次,可以看到出现了一些 坏现象 

 

 这时候,简单的解决这个同步的问题,那就是使用  synchronized     :

把涉及到数量的变化的代码块,我们使用   synchronized  给它锁起来 :

这样一来,尽管多个线程同时进行,操作同个资源 ,也不会出现 坏现象 ,谁能抢到资源,谁执行,但是执行时,别的都需要耐心等 :

所以说, 记住了 !!!

继承Thread类 实现多线程   和 实现 Runnable接口   实现多线程    

这两个的区别里面 , 不要再说  继承Thread类  不能 实现 多线程资源共享了!

是  ‘ 不 易 ’ 实现 资源共享 (不易也是勉强的言词),而不是   不能实现资源共享 !

也可以点进去看看 Thread 的源码 ,其实就是实现了Runable ,我们在了解 继承Thread类 和 实现 Runnable接口   这两种方式实现多线程, 我们一定要保持清醒:

就到这吧。

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:成长之路 设计师:Amelia_0503 返回首页

打赏作者

小目标青年

谢谢。

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值