多线程。

1. Thread创建的写法

  1.继承Thread,重写run

 2.实现Runnable,重写run

3.继承Thread,重写run,使用内部匿名类

4实现Runnable,重写run,使用内部匿名类

5使用lambda方法

Thread中的一些核心属性和方法

  1. id
  2. name
  3. demon(后台线程)
  4. isAlive—判断系统内核中的线程是否存在
  5. start 启动线程
  6. 线程终止写法isinterruptted(即使出现sleep等阻塞状态也会被提前唤醒)

线程的等待

多个线程,调度的顺序在系统是无序的,通过线程等待就可以将线程结束的顺序确定出来

 

通过t.join的方法就可以将结束顺序固定

假设在main线程调用t.join,main线程就会等待t,t结束后,main也结束了。

t线程没有结束,join堵塞等待,等到t结束后,join就会解除堵塞状态,继续执行,

。(堵塞:该线程不参与cpu的调度执行,解除堵塞继续执行,线程参与到cpu的调度。)

可以理解为两个线程换为一前一后的一个线程。

 同时调用t1.join和t2.join的时候,先执行t1。join等待t1线程执行完毕,结束后继续执行t2。join等待t2结束main就会结束。但是t1和t2的线程是在main执行的时候也在执行,他只是等待结束,并不是有了main执行到了join才开始。

 

d9e5a24ab1934338a7e6df0c3f6ab137.png

 

线程是并发执行的

t1 和t2是各自调度各自执行

85761527de7d48e5829a1f1a02fe8c78.png

 

执行先后顺序/谁先结束,都是不确定只不过上述代码中,t1 sleep 3s, t2 sleep 4s

2b45a2c410c0411588b7e41e0de0f38c.png

98610156277f45d8b6ad1d4a2f4488be.png

 

此时 t1 先结束了t2后结束了

所以在执行main方法的时候会在t1join后再等待大约1s(堵塞在t2),才会结束。如果反过来就会变得t2join后,t1。join直接通过。

join() 死等

join(long mills)等到nms 

join(long mills,int naps)等到n毫秒m纳秒。

时间戳:System.currentTimeMills();

通常用sleep方法让他堵塞,防止线程打乱顺序。

在seep的时间到了时候,线程会从堵塞状态恢复到就绪状态。

线程状态

也就是PCB的状态。

1.NEW Thread 对象有了,还没调用 start
系统内部的线程还未创建.
2.TERMINATED 线程已经终止了.
terminated
内核中的线程已经销毁了,
3RUNNABLE 就绪状态.
指的是,这个线程“随叫随到'
a) 这个线程正在 CPU 上执行
b) 这个线程虽然没在CPU 上执行,随时可以调度到 CPU 上执行.

4WAITING
死等 进入的阻塞

5TIMED_WAITING 带有超时时间的等

6BLOCKE
进行锁竞争的时候产生的阻塞

08460394274a49da80d109f5d1eb3161.png

 

 

线程安全问题!!![核心& 难点 &考点]

线程 是随机调度,抢占式执行.=>这样的随机性,就会使程序的执行顺序,产生变数 =>不同的结果.
但是有的时候,週到不同的緒果、认为不可接收。这为是bug)

701657ab209c4402953292ddc28eebc6.png

 

 

 

如果不加join,直接打印,由于三个线程完全并发执行
此时就会使 主线程 打印 count 并非是 t1 t2 算完的效果.(类似于 读脏数据了

 

 

1)把内存 count 中的数值,读取到 cpu 寄存器中,load

2) 把寄存器中的值,+1,还是继续保存在寄存器中 add
3) 把寄存器上述计算后的值,写回到内存 count 里 save

6e693551aea04ecc88dfa8dd327fbe9f.png

 

 

通过上述执行过程,发现,两次++
最后内存的結果、仍然是1!!!
后一次计算 把前一次计算的结果,覆盖掉
ア!!
由于当前线程执行的顺序不确定,有些执行顺序,加两次,结果正确的有些执行顶序,加两次,最后只增加 1
具体有多少次正确,多少次不正确,随机的!!
因此看到的结果,不是精确的 Sw!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

书生浦语全链条开源开放体系

开放了高质量语料数据 预训练 微调 评测 评测框架 部署 智能体 例如把openlab对于计算机视觉的封装

用python爬虫追踪知乎/B站大V排行

最近,我在学习和实践 python 的数据分析,前几周把知乎、B站、虎扑上的各种信息都抓了个遍,比如粉丝数、关注关系、发布时间、阅读量、回复数、标题关键字、地域分布……然后又对这些数据进行了整理,将数据通过各类图表进行可视化&…

【Python从入门到进阶】52、CrawlSpider链接提取器的使用

接上篇《51、电影天堂网站多页面下载实战》 上一篇我们采用Scrapy框架多页面下载的模式来实现电影天堂网站的电影标题及图片抓取。本篇我们来学习基于规则进行跟踪和自动爬取网页数据的“特殊爬虫”CrawlSpider。 一、什么是CrawlSpider? 1、CrawlSpider的概念 Cr…

动画效果-精灵图人物移动

效果&#xff1a;人物跑步移动 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

高风险IP来自哪里:探讨IP地址来源及其风险性质

在网络安全领域&#xff0c;高风险IP地址是指那些可能涉及恶意活动或网络攻击的IP地址。了解这些高风险IP地址的来源可以帮助网络管理员更好地识别和应对潜在的安全威胁。本文将探讨高风险IP地址的来源及其风险性质&#xff0c;并提供一些有效的应对措施。 风险IP查询&#xf…

每日一题(力扣136):只出现一次的数字

利用哈希&#xff1a;时间复杂度O(n)&#xff0c;空间复杂度O(n) class Solution { public:int singleNumber(vector<int>& nums) {if (nums.size() 1){return nums[0];}unordered_map<int, int> map;int len nums.size();for (int i 0; i < len; i){if…

PCL 计算点与圆的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 3D中的圆可以有圆心、半径以及法线来进行表示,如下图所示: 这里我们假设: Δ = P − C \Delta=P-C Δ

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针赋值和测试

目录 前言 Tessy 如何进行打桩操作 普通桩 高级桩 手写桩 Tessy单元测试之指针相关测试注意事项 有类型的指针&#xff08;非函数指针&#xff09;&#xff1a; 有类型的函数指针&#xff1a; void 类型的指针&#xff1a; 结语 前言 进行单元测试之后&#xff0c;但凡…

一键切换ip地址软件的功能和优势

随着网络技术的不断发展和普及&#xff0c;IP地址已经成为我们在互联网上活动的重要标识。然而&#xff0c;在某些特定情况下&#xff0c;我们可能需要频繁地切换IP地址&#xff0c;以满足不同的网络需求或保护个人隐私。一键切换IP地址的软件应运而生&#xff0c;为我们提供了…

TM1650芯片驱动四位数码管(含部分代码)

TM1650芯片驱动四位数码管 SCL&#xff1a;IIC的时钟线 SDA&#xff1a;IIC的数据线 DIGx&#xff1a;每个数码管的总开关&#xff0c;不开&#xff0c;怎么搞也不会亮滴&#xff0c;数码管1、2、3、4 A/K11~G/K17/DP/KP&#xff1a;因为只用了下数码管&#xff0c;所以建议不用…

一文搞定防盗链设计

大家好&#xff0c;我是蓝胖子&#xff0c;在涉及到图片或者视频链接时&#xff0c;通常都会提到防盗链&#xff0c;这一节我将会从防盗链的含义到落地&#xff0c;向大家展示如何设计资源的防盗链。 防盗链的含义与作用 防盗链&#xff0c;顾名思义&#xff0c;是为了防止资…

16_嵌入式文件系统选择

嵌入式文件系统选择 在进行嵌入式系统开发过程中&#xff0c;文件系统的选择和制作与硬件条件息息相关。根据硬件&#xff08;Flash 或 RAM&#xff09;的特性来指定相应的文件系统&#xff0c;能够充分利用硬件资源及提高系统效率。因为目前大部分的嵌入式文件系统都是建立在 …

【技巧】Leetcode 287. 寻找重复数【中等】

寻找重复数 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。 你设计的解决方案必须 不修改 数组…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

中国90米分辨率可蚀性因子K数据

土壤可蚀性因子&#xff08;K&#xff09;数据&#xff0c;基于多种土壤属性数据计算&#xff0c;所用数据包括土壤黏粒含量&#xff08;%&#xff09;、粉粒含量&#xff08;%&#xff09;、砂粒含量&#xff08;%&#xff09;、土壤有机碳含量&#xff08;g/kg&#xff09;、…

计算机组成原理1:计算机系统概述

此系列介绍计算机的组成原理&#xff0c;参考书&#xff1a;《计算机组成原理考研复习指导》(王道论坛组编)。 1.计算机发展史 1.1 计算机发展 计算机变化 第一代计算机 ( 1946 − 1957 ) (1946-1957) (1946−1957)&#xff1a;电子管时代。 逻辑元件采用电子管&#xff1b;使…

LVS、HAProxy

集群&#xff1a;将很多个机器组织到一起&#xff0c;作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类&#xff1a;负载均衡集群&#xff1a;Load Balance。高可用集群&#xff1a;High Available。高性能集群&#xff1a;High Performance Com…

酷开系统覆盖尽可能多的用户,助力酷开科技走在数字化营销前面

用户画像可看作企业应用大数据的根基&#xff0c;是定向广告投放与个性化推荐的前置条件&#xff0c;为数据驱动运营奠定了基础。酷开系统家庭激活终端超过6000万&#xff0c;针对全量用户进行分析&#xff0c;覆盖尽可能多的用户&#xff0c;为提升用户画像准确率提供了很好的…

GWO-CNN-BiLSTM多输入回归预测|灰狼群算法优化的卷积-双向长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

谷歌翻译示例

概述 项目需要&#xff0c;使用谷歌翻译&#xff0c;前提是得翻墙。 1、获取所有语言和其对应编码如下所示&#xff1a; {auto: 检测语言,sq: 阿尔巴尼亚语,ar: 阿拉伯语,am: 阿姆哈拉语,as: 阿萨姆语,az: 阿塞拜疆语,ee: 埃维语,ay: 艾马拉语,ga: 爱尔兰语,et: 爱沙尼亚语,or…