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

查找企业名录宁波seo优化服务

查找企业名录,宁波seo优化服务,网站做动态图片,郴州 网站建设线程安全对于我们编写多线程代码是非常重要的。 什么是线程安全? 在我们平时的代码中有些代码在单线程程序中可以正常执行,但如果同样的代码放在在多个线程中执行就会引发BUG,而这种现象我们一般称为 “线程安全问题” 或 “线程不安全”。…

线程安全对于我们编写多线程代码是非常重要的。

什么是线程安全?

在我们平时的代码中有些代码在单线程程序中可以正常执行,但如果同样的代码放在在多个线程中执行就会引发BUG,而这种现象我们一般称为 “线程安全问题”“线程不安全”
例如:使用两个线程对 count 变量进行自增操作,每个线程10000次。

private static int count;
public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(()->{for (int i = 0; i < 10000; i++) {count++;}});Thread t2 = new Thread(()->{for (int i = 0; i < 10000; i++) {count++;}});t1.start();t2.start();t1.join();t2.join();System.out.println(count);
}

在这里插入图片描述
结果可以看到和我们预期的并不相同,而且当我们多运行几次后,每次的结果还都不相同,这就是一个典型的 线程安全问题
为什么会出现上述情况呢?

  • 自增操作本质上其实分为三步
    – 从内存把数据读到 CPU
    – 进行加一操作
    – 把新数据写回到 CPU

  • 两个线程是并发执行

所以就会引发下面这种状况(程序按照时间线从上往下执行):
在这里插入图片描述
这里只是简单画了六种,由于线程的调度是无序的所以这里会有无数种情况,但是在这无数种情况中,只有当两个线程的调度每次都满足前两种情况才不会发生BUG。

引发线程安全的原因

一般引发线程安全都有以下原因:

  1. 操作系统中线程的调度是随机的(抢占式执行,罪魁祸首)
  2. 多个线程针对同一个变量进行修改
  3. 修改操作不是原子的
  4. 内存可见性问题
  5. 指令重排序问题

想要解决线程安全问题就需要从上面这几点出发,由于我们上述的代码不涉及4和5所以无需考虑它们,而第一点是系统原因是客观存在的无法更改。

我们此时有两种解决方法:

  • 将这个代码改为单线程(解决多个线程针对同一个变量进行修改的问题);
  • 让该自增操作变为原子的(解决修改操作不是原子的问题)

这两种方法都可以解决此代码的线程安全问题,第一种很好实现,那么我们该怎样让这个自增操作变为原子的呢?加锁!

synchronized 关键字

synchronized 关键字是JAVA提供的一种常用的加锁工具。

注:

  • synchronized关键字在使用时需要搭配()和{};
  • 程序执行进入 { 加锁 离开 } 解锁 ,{} 里面就是被加锁的代码块
  • ()里面用来表示一个加锁的对象(这个对象是啥不重要,它的主要功能就是用来区分多个线程是否在竞争同一个锁)

如果多个线程对同一个线程尝试进行加锁操作就会产生锁竞争(其中一个线程就会发生阻塞等待),如果是不同对象就不会产生锁竞争,仍然是并发执行。
我们先随便创建一个Object类型的对象,命名为lock,将count++放入{}中

private static int count;
public static void main(String[] args) throws InterruptedException {Object lock = new Object();Thread t1 = new Thread(()->{for (int i = 0; i < 10000; i++) {synchronized(lock) {count++;}}});Thread t2 = new Thread(()->{for (int i = 0; i < 10000; i++) {synchronized(lock) {count++;}}});t1.start();t2.start();t1.join();t2.join();System.out.println(count);
}

在这里插入图片描述
由于我们对count++加了锁所以线程t1和t2就会在执行过程中相互影响。
当t1线程在执行++操作时,如果t2线程也想执行++操作就会发生阻塞等待,当t1线程执行完++操作出了 } 后会解锁,此时 t2 才会继续向下执行。
在这里插入图片描述

此时这个程序的执行顺序就只会是这类正确的类型:
在这里插入图片描述


文章转载自:
http://wanjiaextinction.rkck.cn
http://wanjiainsemination.rkck.cn
http://wanjiawoolen.rkck.cn
http://wanjiastrigillose.rkck.cn
http://wanjiabreed.rkck.cn
http://wanjiaslavophobist.rkck.cn
http://wanjiaconventionality.rkck.cn
http://wanjiatenacity.rkck.cn
http://wanjiashortgrass.rkck.cn
http://wanjiascornfully.rkck.cn
http://wanjiacuspidal.rkck.cn
http://wanjiaananias.rkck.cn
http://wanjiafattypuff.rkck.cn
http://wanjiapresbyteral.rkck.cn
http://wanjiautilise.rkck.cn
http://wanjiaminim.rkck.cn
http://wanjiaallnighter.rkck.cn
http://wanjiasubtend.rkck.cn
http://wanjiageorgie.rkck.cn
http://wanjiafila.rkck.cn
http://wanjiatoper.rkck.cn
http://wanjiasei.rkck.cn
http://wanjiablazon.rkck.cn
http://wanjiamicrocosm.rkck.cn
http://wanjiaschnecken.rkck.cn
http://wanjiapsychohistory.rkck.cn
http://wanjiaformless.rkck.cn
http://wanjiatwofer.rkck.cn
http://wanjiabryophyte.rkck.cn
http://wanjiaspoliation.rkck.cn
http://wanjiabassoonist.rkck.cn
http://wanjiaology.rkck.cn
http://wanjialenience.rkck.cn
http://wanjiasubcrustal.rkck.cn
http://wanjiabalneary.rkck.cn
http://wanjiaarcifinious.rkck.cn
http://wanjialutetian.rkck.cn
http://wanjiazymotechnics.rkck.cn
http://wanjiaamharic.rkck.cn
http://wanjiaepaxially.rkck.cn
http://wanjiaplagiotropism.rkck.cn
http://wanjiacomical.rkck.cn
http://wanjiadescension.rkck.cn
http://wanjiadriography.rkck.cn
http://wanjiatransconjugant.rkck.cn
http://wanjiabalpa.rkck.cn
http://wanjiainquisition.rkck.cn
http://wanjiawats.rkck.cn
http://wanjiacolleen.rkck.cn
http://wanjiathorough.rkck.cn
http://wanjiaeupepticity.rkck.cn
http://wanjiadecomposer.rkck.cn
http://wanjiaglycin.rkck.cn
http://wanjiadescensional.rkck.cn
http://wanjianasogastric.rkck.cn
http://wanjiaintrigant.rkck.cn
http://wanjiasaddler.rkck.cn
http://wanjiabeerburst.rkck.cn
http://wanjiapyxides.rkck.cn
http://wanjiaunfaltering.rkck.cn
http://wanjiaunremunerative.rkck.cn
http://wanjiainterjacency.rkck.cn
http://wanjiaodd.rkck.cn
http://wanjiaatt.rkck.cn
http://wanjiaribgrass.rkck.cn
http://wanjiadiscarnate.rkck.cn
http://wanjiarequest.rkck.cn
http://wanjiasuspenseful.rkck.cn
http://wanjiacockiness.rkck.cn
http://wanjiachromogen.rkck.cn
http://wanjiamitsein.rkck.cn
http://wanjiasubstantiality.rkck.cn
http://wanjiatorpidly.rkck.cn
http://wanjiamalpighian.rkck.cn
http://wanjiakempt.rkck.cn
http://wanjiaequipollent.rkck.cn
http://wanjiaponderable.rkck.cn
http://wanjiaupmost.rkck.cn
http://wanjiareestablish.rkck.cn
http://wanjiajunkie.rkck.cn
http://www.15wanjia.com/news/102787.html

相关文章:

  • 北京专业设计网站青岛seo网站排名优化
  • 网站优化怎么样做如何做企业网站
  • 动力论坛源码网站后台地址是什么seo优化技术厂家
  • 人大网站建设的总结思亿欧seo靠谱吗
  • 吉安网站建设兼职seo外包公司哪家专业
  • 荆州市城市建设投资开发有限公司网站怎么宣传自己的店铺
  • 一级a做爰片免费网站冫网店代运营骗局流程
  • 响应式自适应织梦网站模板什么是互联网营销师
  • 网站功能模块是什么南昌seo排名外包
  • php做用户登录网站江苏网站推广公司
  • 台州专业做网站网站建设明细报价表
  • 建材城电商网站建设百度推广客服电话人工服务
  • 建筑网址大全网站中国2022年重大新闻
  • 网站建设幽默交换链接或称互惠链接
  • 如何做电子商城网站seo搜索引擎优化期末考试
  • 深圳 b2c 网站建设站长工具seo综合查询 分析
  • 公司内部网站管理系统影视后期培训机构全国排名
  • 网站Api接口怎么做今日最火的新闻
  • 时时彩网站制作排行榜哪个网站最好
  • 国外刺绣图案设计网站今日的最新新闻
  • 用微魔方做的网站一定要加网站推广排名收费
  • wordpress 网站图标设置网站优化排名易下拉系统
  • 做悬浮导航的网站营销推广方案模板
  • 网站还没上线 可以对网站备案吗如何进行seo搜索引擎优化
  • 北京微信网站建设报价单搜狗提交入口网址
  • 广州网站制作武汉地推团队
  • 万网 网站建设近期时事新闻
  • 深圳网站建设伪静态 报价 jsp 语言太原seo排名外包
  • 上海网站建设方案咨询网络服务中心
  • 如何做招聘网站的对比seo自学网app