2020-11-24

## 第四章:并发之共享模型

### 共享带来的问题

为什么需要共享cpu

无法利用cpu的情况:sleep,wait,io操作,通过分时系统提交cpu的利用率。即一个时间段内多个线程可以获取cpu资源

### java中的体现

问题的产生:线程一对**静态变量i**自加5000次,线程二对**静态变量i**自减5000次,最后的i不是0.

问题分析:i++操作在字节码层面不是一条指令。分为多条指令进行,在运算时在线程内进行运算然后写到主存,所线程一中计算后的结果还没有写到主存中cpu时间片用完了,线程二读取到了未被计算的i,所以造成这个结果

![1606190784043](../../../typora%E7%AC%94%E8%AE%B0/%E5%AE%9E%E8%AE%AD/%E6%80%BB%E7%BB%93/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B.assets/1606190784043.png)

#### 临界区

![1606191102078](../../../typora%E7%AC%94%E8%AE%B0/%E5%AE%9E%E8%AE%AD/%E6%80%BB%E7%BB%93/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B.assets/1606191102078.png)

一段代码块内如果存在对共享资源的多线程读写操作,这段代码块称为**临界区**

#### 竞太条件

多个线程在临界区内执行,由于代码的执行序列不同导致结果无法预测,称之发生了竞态条件

#### 解决方法

阻塞式:synchronized,lock

非阻塞式:原子变量

![1606201690965](../../../typora%E7%AC%94%E8%AE%B0/%E5%AE%9E%E8%AE%AD/%E6%80%BB%E7%BB%93/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B.assets/1606201690965.png)

互斥是对于同一资源来说的(静态变量i),同步只是规定了线程的执行顺序

synchronized保证了操作的原子性,**但并不保证可见性???**

`synchronized`在修改了本地内存中的变量后,解锁前会将本地内存修改的内容刷新到主内存中,确保了共享变量的值是最新的,也就保证了可见性。

![1606203560079](../../../typora%E7%AC%94%E8%AE%B0/%E5%AE%9E%E8%AE%AD/%E6%80%BB%E7%BB%93/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B.assets/1606203560079.png)

#### 方法上的synchronized

![1606205255363](../../../typora%E7%AC%94%E8%AE%B0/%E5%AE%9E%E8%AE%AD/%E6%80%BB%E7%BB%93/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B.assets/1606205255363.png)

#### 变量线程安全分析

方法本身是线程私有的,安不安全是对于这个方法里操作的资源来说的,如果这个资源是静态变量或者是引用对象等有可能造成线程不安全的问题

##### 成员变量的安全性

![1606207695209](../../../typora%E7%AC%94%E8%AE%B0/%E5%AE%9E%E8%AE%AD/%E6%80%BB%E7%BB%93/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B.assets/1606207695209.png)

##### 局部变量的安全性

##### 子类继承造成的线程安全问题

当子类覆盖了父类的方法后父类的局部变量会暴漏,方法的访问修饰符是有意义的,可以在一定程度上保护方法中的资源安全问题

#### 常见线程类

String,Integer,StringBuffer,Random,HashTable,concurrent包下的类。

也就是说他们的每个方法是原子的,==但是组合在一起不一定是线程安全的==

**String类为什么是不可变类**

#####  线程安全类方法的组合 

#### 实例分析

##### 售票问题

##### 转账问题

使用的锁必须是A账户和B账户同一把锁,所以将锁加在方法上是不行的,要用Account.class。==使用类锁只能有两个账户同时转账,如果账户很多时会造成性能的低下==

#### Monitor概念

monitor在操作系统中叫做**管程**

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • 《精灵鼠小弟》心地善良、聪明伶俐 #陪你一起长大#[https://s.weibo.com/weibo?q=%23...
    琳玥沐阅读 527评论 0 0
  • 黑色的海岛上悬着一轮又大又圆的明月,毫不嫌弃地把温柔的月色照在这寸草不生的小岛上。一个少年白衣白发,悠闲自如地倚坐...
    小水Vivian阅读 3,103评论 1 5
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,241评论 0 13
  • 感觉自己有点神经衰弱,总是觉得手机响了;屋外有人走过;每次妈妈不声不响的进房间突然跟我说话,我都会被吓得半死!一整...
    章鱼的拥抱阅读 2,170评论 4 5
  • 夜莺2517阅读 127,717评论 1 9