扬州列举网 > 教育培训 > 电脑/网络 > Java怎么保证线程安全江都哪里有Java培训学校
扬州
[切换城市]

Java怎么保证线程安全江都哪里有Java培训学校

更新时间:2020-07-07 16:34:46 浏览次数:75次
区域: 扬州 > 江都
类别:IT认证培训
地址:扬州市江都区仙女镇工农路15号和业大厦四楼(江都商城往西100米海澜之家楼上电梯直达)
Java怎么保证线程安全|江都哪里有Java培训学校?

比如车间生产手机壳是不是需要物料,领物料是不是要到仓库去领取,如果每个流水线都派一个人去领。大家都蜂拥而上乱哄哄的去抢物料。流水线A把本属于流水线B的物料给领了,流水线C又把属于D的给干没了。后有些流水线就没了物料。那为了解决这个问题应该怎么办呢?仓库设置了一个规定,一次只能有一个人来领取物料,大家排队领取。这样子秩序是好多了,但是突然有一天一个大胖子见有人领完了,他直接插队到队头领取(传说中的非公平锁)。排在后面的人敢怒不敢言宝宝心里那个苦啊。

后面仓库又指定了个个规矩,必须按照先来后到的顺序,如有插队就罚款100元。这样大家都按照先来后到的顺序,领物料的时候先看看有没有人排队没人排队就不用排队了直接去领物料,有人排队就自觉的排到队尾去。(传说的公平锁) 哎说了一大堆废话还是回归正题吧。

线程安全在三个方面体现:

1、原子性:
提供了互斥访问,同一时刻只能有一个线程对它进行操作。
流水线工人到仓库领物料只同一时刻只能有一个人领取。

2、可见性:
一个线程对主内存的修改可以及时的被其他线程观察到。
前一个流水线工人领完了10w的物料仓库总共还剩多少物料是对后面领取物料的工人可见的。

3、有序性:
程序的执行顺序按照代码顺序执行,在单线程环境下,程序的执行都是有序的,但是在多线程环境下,JMM 为了性能优化,编译器和处理器会对指令进行重排,程序的执行会变成无序。
比如到仓库领物料的时候,要分三个步骤,步先确认信息核实你是哪个车间哪个产线的,第二步填写物料领取单子,第三步到物料处领取物料。如果仓库为了提高工作效率这几个步骤有时候可以互换。可以是2->1->3的顺序。也可以3->2->1的顺序。下面通过代码来演示下吧怎么正确的获取物料。100条流水线每条流水线领取1000个物料终物料应该剩余0。

出现线程安全问题的原因?
在多线程并发环境下,多个线程共同访问同一共享内存资源时,其中一个线程对资源进行写操作的中途(写入已经开始,但还没结束),其他线程对这个写了一半的资源进了读操作,或者对这个写了一半的资源进了写操作,导致此资源出现数据错误。

【报名地址】:
扬州市江都区仙女镇工农路15号和业大厦四楼(江都商城往西100米海澜之家楼上电梯直达)
咨询电话:180**121***34719(微信同号)/0514-86733278 戴老师
友情提醒:周一至周日 8:30—20:30 节假日照常报名
扬州电脑/网络相关信息
注册时间:2018年11月25日
UID:545890
---------- 认证信息 ----------
手机已认证
查看用户主页