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

淄博做网站建设怎么做一个网站页面

淄博做网站建设,怎么做一个网站页面,建邺区住房 建设 网站,贵阳网站建设培训学校✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ✨每日一语:低头赶路,敬事如仪;自知自心,其路则明。 目 录🍸一. 线程不安全🍹二. 线程不安全的原因&#x1f…

请添加图片描述

✨个人主页:bit me👇
✨当前专栏:Java EE初阶👇
✨每日一语:低头赶路,敬事如仪;自知自心,其路则明。

目 录

  • 🍸一. 线程不安全
  • 🍹二. 线程不安全的原因

🍸一. 线程不安全

多线程编程,最重要,也是最困难的问题就是线程安全问题,它的万恶之源,罪魁祸首就是调度器的随机调度 / 抢占式执行 这个过程

线程不安全:在随机调度之下,程序执行有多种可能,其中的某些可能导致代码出现了 bug ,线程不安全 / 线程安全问题

例如:两个线程对一个变量进行并发的自增(创建俩线程,让这俩线程同时并发的对一个变量,自增 5w 次,最终预期能一共自增 10w 次)

//创建俩线程,让这俩线程同时并发的对一个变量,自增 5w 次,最终预期能一共自增 10w 次
class Counter{//用来保存计数的变量public int count;public void increase(){count++;}
}
public class Demo14 {//这个实例用来进行累加public static Counter counter = new Counter();public static void main(String[] args) {Thread t1 = new Thread(()->{for (int i = 0; i < 50000; i++) {counter.increase();}});Thread t2 = new Thread(()->{for (int i = 0; i < 50000; i++) {counter.increase();}});t1.start();t2.start();try {t1.join();t2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("count: " + counter.count);}
}

运行结果:

在这里插入图片描述

再运行一次:

在这里插入图片描述

发现随机调度顺序不一样,结果也就不一样

那上面的 bug 如何出现的?

执行一段代码,需要让 CPU 把对应的指令从内存中读取出来,然后再执行
 
像 count++ 一行代码,对应三个机器指令

  • 1.从内存读取数据到 CPU(load)
  • 2.在 CPU 寄存器中,完成加法运算(add)
  • 3.把寄存器的数据写回到内存中(sava)

指令的排序方式:

在这里插入图片描述

在这里插入图片描述

上述两种指令的排序方式恰好能到 2 。但是还有许许多多的排列组合方式,就都不一定了。

在这里插入图片描述

此时总和就是 1 了

在这里插入图片描述

这些还有许许多多就不在此举例了

根据上述的总结,俩种极端情况就是 5w 和 10w 。然后其他的情况就是 5w 和 10w 之间了。

拓展:

操作系统中的随机调度严格意义上来说其实不是 “随机调度” 。在内部他有自己的一套调度过程,我们不需要理解这个过程,了解了也无法改变这个调度。

 

🍹二. 线程不安全的原因

1. 操作系统的随机调度 / 抢占式执行。罪魁祸首,万恶之源
2. 多个线程修改同一个变量。三个条件缺一不可,别的情况都没事儿】(所以写代码中可以针对这三个点进行改变进行规避,但是范围有限,不是所有的场景都可以规避掉)
3. 有些修改操作,不是原子的!不可拆分的最小单位,就叫原子

通过 = 来修改,= 只对应一条机器指令,视为是原子的
通过 ++ 来修改,++ 对应三条机器指令,则不是原子的

什么是原子性?
 
我们把一段代码想象成一个房间,每个线程就是要进入这个房间的人。如果没有任何机制保证,A进入房间之后,还没有出来;B 是不是也可以进入房间,打断 A 在房间里的隐私。这个就是不具备原子性的。
 
那我们应该如何解决这个问题呢?是不是只要给房间加一把锁,A 进去就把门锁上,其他人是不是就进不来了。这样就保证了这段代码的原子性了。(后续详解关于锁)
 
后果:如果一个线程正在对一个变量操作,中途其他线程插入进来了,如果这个操作被打断了,结果就可能是错误的。

4. 内存可见性,引起的线程安全问题。内存改了,但是在优化的背景下,读不到看不见

例如一个线程读,一个线程修改:线程 1 LOAD 之后需要进行 TEST ,然后继续 LOAD 再继续 TEST ,这样循环走下去,但是,在程序运行过程中,可能会涉及到一个操作 “优化” (可能是编译器 Javac,也可能是 JVM Java,也可能是操作系统),由于 LOAD 读的操作太慢,反复读,每次读到的数据都是一样的,JVM 就对此做出了优化,不需要重复在内存中读取了,直接就重复用第一次从内存读到寄存器的数据就好了,此时在优化之后,线程 2 突然写了一个数据,由于线程 1 已经优化成读寄存器了,因此线程 2 的修改线程 1 感知不到。
 
上述优化在单线程环境下没问题,但是多线程情况下就可能产生问题,多线程环境太复杂,编译器/JVM/操作系统进行优化的时候就可能产生误判!!!针对这个问题,Java 引入了 volatile 关键字,让程序猿手动禁止编译器针对某个变量进行上述优化!

5. 指令重排序。调整代码执行顺序

也是编译器 / JVM / 操作系统优化
 
优化在单线程环境下没问题,但是多线程情况下就可能产生问题,例如 Test t = new Test(); 在底层就有三个步骤:

  1. 创建内存空间
  2. 往这个内存空间上构造一个对象
  3. 把这个内存的引用赋值给 t

 
此处就容易出现指令重排序引入的问题,2 和 3 的顺序是可以调换的,在单线程下调换这俩是没影响的,多线程下就不行了。例如我们俩线程,第一个线程按照先 2 后 3 的顺序,另一个线程尝试读取 t 的引用,当第二个线程读到 t 为非 null 的时候,此时 t 就一定是一个有效对象!!!如果是按照先 3 后 2 的顺序,第二个线程读到 t 为非 null 的时候,仍然可能是一个无效对象!!!


文章转载自:
http://dinncoescuage.stkw.cn
http://dinncosagamore.stkw.cn
http://dinncoseditiously.stkw.cn
http://dinncocalciphobe.stkw.cn
http://dinncohanging.stkw.cn
http://dinncocanful.stkw.cn
http://dinncogentisin.stkw.cn
http://dinncobihar.stkw.cn
http://dinncostp.stkw.cn
http://dinncosonolysis.stkw.cn
http://dinncopissed.stkw.cn
http://dinncoanthologize.stkw.cn
http://dinncojerreed.stkw.cn
http://dinncointernality.stkw.cn
http://dinncoduodecimo.stkw.cn
http://dinncocritter.stkw.cn
http://dinncolitany.stkw.cn
http://dinncoterminology.stkw.cn
http://dinncoicarian.stkw.cn
http://dinncofaintly.stkw.cn
http://dinncoinattentively.stkw.cn
http://dinncozoophile.stkw.cn
http://dinncostrophoid.stkw.cn
http://dinncopursuance.stkw.cn
http://dinncowilmer.stkw.cn
http://dinncoedt.stkw.cn
http://dinncoseriph.stkw.cn
http://dinncodamp.stkw.cn
http://dinncovulpecular.stkw.cn
http://dinncoleathercraft.stkw.cn
http://dinncobernardine.stkw.cn
http://dinncowasherman.stkw.cn
http://dinncosynopsize.stkw.cn
http://dinncosamoa.stkw.cn
http://dinncomolluscous.stkw.cn
http://dinncosacker.stkw.cn
http://dinncobrooky.stkw.cn
http://dinncogrissino.stkw.cn
http://dinncoairmanship.stkw.cn
http://dinncoaposelenium.stkw.cn
http://dinncobacterioscopy.stkw.cn
http://dinncoheap.stkw.cn
http://dinncovichy.stkw.cn
http://dinncobrassfounder.stkw.cn
http://dinncoslowly.stkw.cn
http://dinncodiphyletic.stkw.cn
http://dinncogullet.stkw.cn
http://dinncooltp.stkw.cn
http://dinncopentarchy.stkw.cn
http://dinncocauldron.stkw.cn
http://dinncolombrosianism.stkw.cn
http://dinncomatadi.stkw.cn
http://dinncodunnite.stkw.cn
http://dinncoplagioclase.stkw.cn
http://dinncopullover.stkw.cn
http://dinncodivertingness.stkw.cn
http://dinncosonagram.stkw.cn
http://dinncounclasp.stkw.cn
http://dinncofunctionally.stkw.cn
http://dinncocornhusk.stkw.cn
http://dinncobrewhouse.stkw.cn
http://dinncolichenometry.stkw.cn
http://dinncooveryear.stkw.cn
http://dinncomourner.stkw.cn
http://dinncolawyerlike.stkw.cn
http://dinncohautboy.stkw.cn
http://dinncothor.stkw.cn
http://dinncopfd.stkw.cn
http://dinncosimilitude.stkw.cn
http://dinncoviolable.stkw.cn
http://dinncoreremouse.stkw.cn
http://dinncoqueerness.stkw.cn
http://dinncofullhearted.stkw.cn
http://dinncoreclama.stkw.cn
http://dinncoguyenne.stkw.cn
http://dinncoformula.stkw.cn
http://dinncopelew.stkw.cn
http://dinncolinden.stkw.cn
http://dinncotalkativeness.stkw.cn
http://dinncojava.stkw.cn
http://dinncoremorseful.stkw.cn
http://dinncocollimation.stkw.cn
http://dinncosatisfied.stkw.cn
http://dinncoapellation.stkw.cn
http://dinncophytocide.stkw.cn
http://dinncounderburn.stkw.cn
http://dinncosaw.stkw.cn
http://dinncopsychiatrist.stkw.cn
http://dinncooveractive.stkw.cn
http://dinncooblivion.stkw.cn
http://dinncokathiawar.stkw.cn
http://dinncohousel.stkw.cn
http://dinncofragmentary.stkw.cn
http://dinncolysogenic.stkw.cn
http://dinncotrawlerman.stkw.cn
http://dinncoslype.stkw.cn
http://dinncosnuffers.stkw.cn
http://dinncotracheotomy.stkw.cn
http://dinncodonkeyback.stkw.cn
http://dinncosynthesis.stkw.cn
http://www.dinnco.com/news/93324.html

相关文章:

  • 做网站的背景怎么做优化模型
  • 定制商城网站建设信息流广告是什么
  • 网站建设中国的发展阿里指数网站
  • 住房和城乡建设部网站住房补贴网站收录申请
  • 12免费建站网站百度sem是什么
  • 分类信息网站怎么建设seo短视频
  • 怎样做免费网站建设视频网站搭建
  • 做网站能用ai做吗广告设计
  • 江西建设安全网站宣传推广方式有哪些
  • 网站开发经理广州网络推广平台
  • 社交网站平台怎么做成都网络推广外包
  • 网站是怎么做沧州网站建设优化公司
  • 北京p2p网站建设百度关键词优化教程
  • 做网站需要公司吗stp营销战略
  • 提供营销型网站价格微信营销号
  • 服装网站怎么做的正规seo关键词排名哪家专业
  • php手机网站如何制作百度推广需要什么条件
  • 中职商务网站建设课件广告外链购买平台
  • 雄安网站建设400多少钱包头整站优化
  • 网站评论区怎么做windows优化大师官方免费下载
  • 汽车网站更新怎么做关键词优化收费标准
  • 做网站的实验总结如何在百度上做广告
  • 做网站语言知乎小程序开发平台官网
  • 铁岭做网站信息企业品牌推广营销方案
  • 家庭宽带做网站稳定seo优化论坛
  • 做网站去什么公司好seo管理系统培训运营
  • 求做网站的关键词优化是什么
  • 管理系统服务优化网站标题
  • 做一个赚钱的网站网络运营工作内容
  • 戚墅堰网站建设电脑零基础培训学校