一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于多線程并發的常見問題(詳解)

基于多線程并發的常見問題(詳解)

2021-01-15 14:17tonghun Java教程

下面小編就為大家帶來一篇基于多線程并發的常見問題(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一 概述

1.volatile

保證共享數據一旦被修改就會立即同步到共享內存(堆或者方法區)中。

2.線程訪問堆中數據的過程

線程在棧中建立一個數據的副本,修改完畢后將數據同步到堆中。

3.指令重排

為了提高執行效率,CPU會將沒有依賴關系的指令重新排序。如果希望控制重新排序,可以使用volatile修飾一個變量,包含該變量的指令前后的指令各自獨立排序,前后指令不能交叉排序。

二 常見問題及應對

1.原子性問題

所謂原子性,指的是一個操作不可中斷,即在多線程并發的環境下,一個操作一旦開始,就會在同一個CPU時間片內執行完畢。如果同一個線程的多個操作在不同的CPU時間片上執行,由于中間出現停滯,后面的操作在執行時可能某個共享數據被其他線程修改,而該修改并未同步到當前線程中,導致當前線程操作的數據與實際不符,這種由于執行不連貫導致的數據不一致問題被稱作原子性問題。

2.可見性問題

可見性問題的出現與線程訪問共享數據的方式有關。線程訪問堆(方法區)中的變量時,先在棧中建立一個變量的副本,修改后再同步到堆中。如果一個線程剛建立副本,這時另一線程修改了變量,尚未同步到堆中,這時就會出現兩個線程操作同一變量的同一種狀態的現象,比如i=9,變量i的初始值為9,每一個線程的操作都是減1。兩個線程A與B同時訪問變量,B先執行i-1,在將結果i=8同步到堆中前,A線程也執行i-1,這時i=9的狀態就被執行兩次,出現線程安全問題。

線程安全問題產生的原因:一個線程對共享數據的修改不能立即為其他線程所見。

volatile提供了一種解決方案:

一旦一個線程修改了被volatile修飾的共享數據,這種修改就會立即同步到堆中,這樣其他數據從堆中訪問共享數據時始終獲得的是在多個線程中的最新值。

volatile的缺陷:

volatile只能保證一個線程從堆中獲取數據時獲取的是當前所有線程中的最新值,假如一個線程已經從堆中復制了數據,在操作完成前,其他線程修改了數據,修改后的數據并不會同步到當前線程中。

3.有序性問題

為了提高執行效率,CPU會對那些沒有依賴關系的指令重新排序,重新排序后的執行結果與順序執行結果相同。

例如,在源代碼中:

?
1
2
int i=0;
int y=1;

CPU在執行時可能先執行“int y=1;”,接著執行“int i=0;”,執行結果與順序執行結果相同。

指令重排在單線程環境下是安全的,在多線程環境下就可能出現問題。比如:

線程A:

?
1
2
s=new String("sssss");//指令1
flag=false;//

指令2線程B:

?
1
2
3
while(flag){
doSome();
}

s.toUpperCase();//指令3如果線程A順序執行,即執行指令1,再執行指令2,線程B的執行不會出現問題。指令重排后,假如線程A先執行指令2,這時flag=true,切換到線程2,終止循環,執行指令3,由于s對象尚未創建就會出現空指針異常。

有序性問題產生的原因:

一個線程對其他線程對共享數據的修改操作有順序要求,比如線程B要求線程A先執行指令1,再執行指令2,由于指令重排,實際并未按照要求的順序執行,這時就出現了線程安全問題。

解決思路:

1.利用同步機制,使得同一時間只有一個線程可以訪問共享數據,效率低。

2.使用volatile,一個指令包含volatile修飾的變量,那么這條指令的執行順序不變,該指令前后的指令可以各自獨立重排,無法交叉重排。

以上這篇基于多線程并發的常見問題(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/tonghun/p/7086251.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 999热在线精品观看全部 | 国产精品99久久 | 国产成人亚洲精品91专区高清 | 欧美色影视| 亚洲酒色1314狠狠做 | 久久中文字幕亚洲 | 星空无限传媒视频在线观看视频 | jizzjizz大学生 | 乖女的嫩奶水h文孕妇 | 午夜小视频免费 | 午夜亚洲WWW湿好爽 午夜想想爱午夜剧场 | 国产成人盗拍精品免费视频 | tobu8中国在线观看免费视频 | 2012年免费中文视频 | japan日韩xxxx69hd| 久久精品成人免费看 | 午夜宅男网 | bl高h荡肉古代np | 教室眠催白丝美女校花 | 日本一区二区不卡久久入口 | 和两个男人玩3p好爽视频 | 轻轻操在线视频 | 婷婷麻豆 | 久久香蕉国产免费天天 | 成人动漫影院 | 成人观看免费大片在线观看 | 强漂亮白丝女教师小说 | 久久精品国产亚洲AV热无遮挡 | 精品AV综合导航 | 涩色爱 | 倩女还魂在线观看完整版免费 | 亚洲AV无码偷拍在线观看 | 男人的天堂视频在线 | 秋霞717理论片在线观看 | 亚洲国产精品一在线观看 | 四虎永久网址在线观看 | 九9热这里只有真品 | 免费网站看v片在线成人国产系列 | 日本免费三区 | 性free非洲老妇 | 爱情岛论坛亚洲一号路线 |