当前位置: 首页 > news >正文

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接口   这两种方式实现多线程, 我们一定要保持清醒:

就到这吧。

相关文章:

  • SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)
  • Springboot yml配置参数数据加密 (数据加密篇 一)
  • Springboot AOP实现指定敏感字段数据加密 (数据加密篇 二)
  • Springboot 使用mysql加密解密函数 (数据加密篇 三)
  • Java List数据量大, 需要分片批次操作
  • Springboot yml配置参数加密 ,jasypt自定义解密器(拓展篇)
  • Springboot 自定义mybatis 拦截器,实现我们要的扩展
  • Eureka 一直刷 Running the evict task with compensationTime 0ms
  • Eureka 注册、下线、续约事件的监听使用
  • Java Thread.sleep(),结合例子只学一次
  • Java ArrayList new出来,默认的容量到底是0还是10 ?
  • Mysql 关于 int(1) 和 int(11) , 我必须要说一下了。
  • SpringCloud 整合注册中心,配置中心 Nacos (九)
  • Springboot 自定义注解AOP实现时间参数格式转换
  • 看什么看啊,你不会还不会抓HTTPS请求报文吧?
  • C++入门教程(10):for 语句
  • CentOS 7 修改主机名
  • Computed property XXX was assigned to but it has no setter
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Making An Indicator With Pure CSS
  • Odoo domain写法及运用
  • Phpstorm怎样批量删除空行?
  • php的插入排序,通过双层for循环
  • PV统计优化设计
  • Redis 懒删除(lazy free)简史
  • VUE es6技巧写法(持续更新中~~~)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 给Prometheus造假数据的方法
  • 基于 Babel 的 npm 包最小化设置
  • 前端代码风格自动化系列(二)之Commitlint
  • 前言-如何学习区块链
  • 浅谈Golang中select的用法
  • 如何编写一个可升级的智能合约
  • 我有几个粽子,和一个故事
  • 想写好前端,先练好内功
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 正则表达式-基础知识Review
  • # C++之functional库用法整理
  • #微信小程序:微信小程序常见的配置传旨
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (145)光线追踪距离场柔和阴影
  • (3)nginx 配置(nginx.conf)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (十)T检验-第一部分
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)Sublime Text3配置Lua运行环境
  • (转)我也是一只IT小小鸟
  • (轉)JSON.stringify 语法实例讲解
  • ***利用Ms05002溢出找“肉鸡
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./configure,make,make install的作用
  • .form文件_SSM框架文件上传篇