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

中国空间网站湖南网站搜索排名优化公司

中国空间网站,湖南网站搜索排名优化公司,emlog换wordpress,企业网站搜索优化外包Java中的线程安全问题 谈到线程安全问题,我们先说说什么是共享资源。所谓共享资源,就是说该资源被多个线程所持有或者说多个线程都可以去访问该资源。 线程安全问题是指当多个线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数…

Java中的线程安全问题

谈到线程安全问题,我们先说说什么是共享资源。所谓共享资源,就是说该资源被多个线程所持有或者说多个线程都可以去访问该资源。

线程安全问题是指当多个线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数据或者其他不可预见的结果的问题。

在这里插入图片描述
线程A和线程B可以同时操作主内存中的共享变量,那么线程安全问题和共享资源之间是什么关系呢?

是不是说多个线程共享了资源,当它们都去访问这个共享资源时就会产生线程安全问题呢?答案是否定的,如果多个线程都只是读取共享资源,而不去修改,那么就不会存在线程安全问题,只有当至少一个线程修改共享资源时才会存在线程安全问题。

最典型的就是计数器类的实现,计数变量count本身是一个共享变量,多个线程可以对其进行递增操作,如果不使用同步措施,由于递增操作是获取一计算一保存三步操作,因此可能导致计数不准确。

在这里插入图片描述
假如当前count=0,在t1时刻线程A读取count值到本地变量countA。

然后在t2时刻递增countA的值为1,同时线程B读取count的值0到本地变量countB,此时countB的值为0(因为countA的值还没有被写入主内存)。

在t3时刻线程A才把countA的值1写入主内存,至此线程A一次计数完毕,同时线程B递增CountB的值为1。

在t4时刻线程B把countB的值1写入内存,至此线程B一次计数完毕。

这里先不考虑内存可见性问题,明明是两次计数,为何最后结果是1而不是2呢?其实这就是共享变量的线程安全问题。

那么如何来解决这个问题呢?这就需要在线程访问共享变量时进行适当的同步,在Java中最常见的是使用关键字synchronized进行同步。

Java中共享变量的内存可见性问题

谈到内存可见性,我们首先来看看在多线程下处理共享变量时Java的内存模型。
在这里插入图片描述
Java内存模型规定,将所有的变量都存放在主内存中,当线程使用变量时,会把主内存里面的变量复制到自己的工作空间或者叫作工作内存,线程读写变量时操作的是自己工作内存中的变量。

Java内存模型是一个抽象的概念,那么在实际实现中线程的工作内存是什么呢?
在这里插入图片描述
一个双核CPU系统架构,每个核有自己的控制器和运算器,其中控制器包含一组寄存器和操作控制器,运算器执行算术逻辑运算。

每个核都有自己的一级缓存,在有些架构里面还有一个所有CPU都共享的二级缓存。那么Java内存模型里面的工作内存,就对应这里的L1或者L2缓存或者CPU的寄存器。

当一个线程操作共享变量时,它首先从主内存复制共享变量到自己的工作内存,然后对工作内存里的变量进行处理,处理完后将变量值更新到主内存。

那么假如线程A和线程B同时处理一个共享变量,会出现什么情况?

假设线程A和线程B使用不同CPU执行,并且当前两级Cache都为空,那么这时候由于Cache的存在,将会导致内存不可见问题,具体看下面的分析。

  • 线程A首先获取共享变量X的值,由于两级Cache都没有命中,所以加载主内存中X的值,假如为0。然后把X=0的值缓存到两级缓存,线程A修改X的值为1,然后将其写入两级Cache,并且刷新到主内存。线程A操作完毕后,线程A所在的CPU的两级Cache内和主内存里面的X的值都是1。
  • 线程B获取X的值,首先一级缓存没有命中,然后看二级缓存,二级缓存命中了,所以返回X=1;到这里一切都是正常的,因为这时候主内存中也是X=1。然后线程B修改X的值为2,并将其存放到线程2所在的一级Cache和共享二级Cache中,最后更新主内存中X的值为2。到这里一切都是好的。
  • 线程A这次又需要修改X的值,获取时一级缓存命中,并且X=1,到这里问题就出现了,明明线程B已经把X的值修改为了2,为何线程A获取的还是1呢?这就是共享变量的内存不可见问题,也就是线程B写入的值对线程A不可见。

那么如何解决共享变量内存不可见问题?使用Java中的volatile关键字就可以解决这个问题。

http://www.yayakq.cn/news/166272/

相关文章:

  • 红酒网站建设方案范本wordpress调用随机文章代码 | wordpress啦!
  • 网站建设案例教程视频教程在线ps手机版网页版
  • 哈尔滨公司建站模板vi设计作品图
  • 商城网站功能列表WordPress考勤模板
  • 文教设施网站制作方案wordpress企业mip模板
  • 网站建设 网站公司注册流程及资料
  • 网站放在服务器上西安seo优化培训
  • 规划怎样做网站2021年十大热点事件
  • 企业网站建设规划方案网站开发网页跳转到新的页面
  • 网站后台建设费用知更鸟wordpress主题
  • 中山网站建设文化教程uo建设网站
  • 网站开发模板免费下载成都网站建设前几公司
  • 可信网站多少钱南昌企业建站程序
  • 域名注册网站排名建设用地规划许可证去哪个网站查
  • 手机网站修改网站建设的关键细节
  • 兰州网站建设价格如何把静态图片做成动态视频
  • 整合资源加强全市网站建设公司做普通网站
  • 网站电脑端和手机端提升审美的网站
  • 电商网站建设源代码东莞人才网招聘官网
  • 綦江网站建设公司怎么让别人找你做网站
  • 全国建设地产网站社交网站盈利吗
  • 自定义功能的网站舆情监测软件免费版
  • 高校建设思政教育网站案例南京市建设执业资格中心网站
  • 网站微信支付怎么做网络服务提供者接到权利人
  • 编程软件做网站的手机网站怎么做的好
  • 网站建设广州天河区高端画册定制印刷公司
  • 大成建设株式会社网站网页制作软件中的三剑客
  • wordpress外链站内打开暴走漫画网站建设中模板
  • 南安建设局网站百度网页版电脑版入口
  • 怎样可以查到做网站公司购物国外网站的建立