日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

《Java 高并发》02 多线程的特性

發(fā)布時(shí)間:2023/12/10 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Java 高并发》02 多线程的特性 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多線程的三大特性:原子性、可見(jiàn)性和有序性。

原子性

原子性是指一個(gè)操作或者多個(gè)操作,一旦開(kāi)始就不會(huì)被其他線程干擾,即使是在多個(gè)線程一起執(zhí)行的情況下也不會(huì)被干擾。或者不執(zhí)行。

原子性主要是為了保證數(shù)據(jù)一致,線程安全問(wèn)題。

可見(jiàn)性

可見(jiàn)性是指當(dāng)一個(gè)線程修改了某一個(gè)共享變量的值,其他線程是否能夠立即知道這個(gè)修改。

對(duì)于串行程序來(lái)說(shuō),可見(jiàn)性問(wèn)題是不存在的。因?yàn)槟阍谌魏我粋€(gè)操作步驟中修改了某個(gè)變量,那么后續(xù)的步驟中,讀取這個(gè)變量的值一定是修改后的新值。

對(duì)于并行程序來(lái)說(shuō)就可能存在了。如果存在兩個(gè)線程:線程1、線程2,共享變量:t,線程1 為了優(yōu)化獲取共享變量速度將共享變量存放在緩存中,此時(shí)線程2 對(duì)共享變量進(jìn)行修改,那么線程1 又無(wú)法意識(shí)到這個(gè)改動(dòng),依然從緩沖中獲取數(shù)據(jù)。因此,就產(chǎn)生了可見(jiàn)性問(wèn)題。

除了上述提到的緩存優(yōu)化會(huì)導(dǎo)致可見(jiàn)性問(wèn)題,指令重拍以及編輯器的優(yōu)化,都有可能導(dǎo)致一個(gè)線程的修改不會(huì)立即被其他線程察覺(jué)。

有序性

有序性問(wèn)題可能是三個(gè)問(wèn)題中最難理解的了。對(duì)于一個(gè)線程的執(zhí)行代碼而言,是一次執(zhí)行的。但是,在并發(fā)是,程序的執(zhí)行可能就會(huì)出現(xiàn)亂序。

public class OrderTest {int a = 0;boolean flag = false;public void writer(){a = 1;flag = true;}public void reader(){if (!flag){System.out.println(a);}}}

假設(shè)有兩個(gè)線程:A、B,線程A 先執(zhí)行 writer 方法,接著線程B 執(zhí)行 reader 方法,此時(shí)線程B 不一定能打印 a 。

總結(jié)

以上是生活随笔為你收集整理的《Java 高并发》02 多线程的特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。