JAVA 继承Thread 实现多线程 资源不共享? 请保持清醒 。
前排我先说结论:
继承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接口 这两种方式实现多线程, 我们一定要保持清醒:
就到这吧。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~