基于多線程并發(fā)的常見問題(詳解)-創(chuàng)新互聯(lián)

一 概述

創(chuàng)新互聯(lián)公司專注于洮北企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站開發(fā)。洮北網(wǎng)站建設(shè)公司,為洮北等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

1.volatile

保證共享數(shù)據(jù)一旦被修改就會(huì)立即同步到共享內(nèi)存(堆或者方法區(qū))中。

2.線程訪問堆中數(shù)據(jù)的過程

線程在棧中建立一個(gè)數(shù)據(jù)的副本,修改完畢后將數(shù)據(jù)同步到堆中。

3.指令重排

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

二 常見問題及應(yīng)對(duì)

1.原子性問題

所謂原子性,指的是一個(gè)操作不可中斷,即在多線程并發(fā)的環(huán)境下,一個(gè)操作一旦開始,就會(huì)在同一個(gè)CPU時(shí)間片內(nèi)執(zhí)行完畢。如果同一個(gè)線程的多個(gè)操作在不同的CPU時(shí)間片上執(zhí)行,由于中間出現(xiàn)停滯,后面的操作在執(zhí)行時(shí)可能某個(gè)共享數(shù)據(jù)被其他線程修改,而該修改并未同步到當(dāng)前線程中,導(dǎo)致當(dāng)前線程操作的數(shù)據(jù)與實(shí)際不符,這種由于執(zhí)行不連貫導(dǎo)致的數(shù)據(jù)不一致問題被稱作原子性問題。

2.可見性問題

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

線程安全問題產(chǎn)生的原因:一個(gè)線程對(duì)共享數(shù)據(jù)的修改不能立即為其他線程所見。

volatile提供了一種解決方案:

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

volatile的缺陷:

volatile只能保證一個(gè)線程從堆中獲取數(shù)據(jù)時(shí)獲取的是當(dāng)前所有線程中的最新值,假如一個(gè)線程已經(jīng)從堆中復(fù)制了數(shù)據(jù),在操作完成前,其他線程修改了數(shù)據(jù),修改后的數(shù)據(jù)并不會(huì)同步到當(dāng)前線程中。

3.有序性問題

為了提高執(zhí)行效率,CPU會(huì)對(duì)那些沒有依賴關(guān)系的指令重新排序,重新排序后的執(zhí)行結(jié)果與順序執(zhí)行結(jié)果相同。

例如,在源代碼中:


int i=0;
int y=1;

名稱欄目:基于多線程并發(fā)的常見問題(詳解)-創(chuàng)新互聯(lián)
鏈接分享:http://muchs.cn/article12/dhiodc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站制作、虛擬主機(jī)網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)