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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM第五部分 高效并发

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM第五部分 高效并发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java 內(nèi)存模型與線程

硬件內(nèi)存模型

?

java內(nèi)存模型

主內(nèi)存vs工作內(nèi)存

所有變量都在主內(nèi)存(虛擬機(jī)內(nèi)存的一部分),每條線程都有自己的工作內(nèi)存,線程所有用到的變量都必須從主內(nèi)存拷貝出來(不能直接讀寫主內(nèi)存變量)

工作內(nèi)存如何與主內(nèi)存交互?

8種內(nèi)存操作:(lock、uncock) (read、load) (use、assign) (store、write)配對出現(xiàn)

volatile關(guān)鍵字

兩種特性:1.變量可見性(共享性,自己看法)2.禁止指令重排

可見性:更改變量,虛擬機(jī)主內(nèi)存刷新后所有線程可見

指令重排:volatile boolean flag=false;

…………(其他java語句)

flag=true;

重排后f,lag初始化后立馬為true;但volatile 修飾后不會

使用volatile前提條件:

1.運(yùn)算結(jié)果不依賴當(dāng)前值,或者能夠確保只有單一線程修改變量

2.變量不需要其他狀態(tài)變量參與

volatile關(guān)鍵字在寫操作耗時,但是也比鎖的總開銷小

線程實現(xiàn)

三種方式:內(nèi)核線程,用戶級線程,用戶加輕量級進(jìn)程混合實現(xiàn)

內(nèi)核線程狀態(tài)轉(zhuǎn)換開銷大,程序一般使用的是內(nèi)核線程的高級接口——輕量級進(jìn)程(LWP)

java線程調(diào)度

兩種方式:協(xié)同式線程調(diào)度(效果極差),搶占式線程調(diào)度(協(xié)同分配時間)

java線程定義優(yōu)先級,實現(xiàn)給某些進(jìn)程更多時間,但是不太靠譜,java優(yōu)先級與系統(tǒng)優(yōu)先級不是一一對應(yīng)

狀態(tài)轉(zhuǎn)換

新建-運(yùn)行-等待-阻塞-結(jié)束

java線程安全與鎖優(yōu)化

5類

1.不可變

final關(guān)鍵字修飾的對象、屬性

2.絕對線程安全

api實現(xiàn)同步,但是絕對線程安全不是絕對的線程安全

vector get() remove()方法,get(i)同時remove(i),那么,拋出數(shù)組越界異常

3.線程相對安全

我們通常說的線程安全,需要保證對象單獨(dú)的操作是線程安全的,我們調(diào)用時不需要額外做保證。但是,特定順序的連續(xù)調(diào)用,也可能額外同步手段

4.線程兼容

對象本身不是線程安全,調(diào)用端正確使用同步手段保證

5.線程對立

不可能實現(xiàn)多線程安全的代碼

線程安全實現(xiàn)方法?

1.互斥同步(悲觀策略)

互斥方法:臨界區(qū) 互斥量 信號量

synchronized

2.非阻塞同步(樂觀策略)

3.無同步方案

a.可重入代碼(返回結(jié)果可預(yù)測)

?b.線程本地儲存

鎖優(yōu)化

1.自旋鎖與自適應(yīng)自旋

無法獲取鎖時,自旋等待一直請求,短時間內(nèi)可以獲得很好收益(避免線程切換開銷),自旋次數(shù)到達(dá)限定次數(shù)后,掛起。

2.鎖消除

檢測到不存在競爭,消除鎖(不存在競爭還加鎖?api中也有很多鎖,比如stringBUffer.append()),stringBUffer.append(s1),stringBUffer.append(s2),stringBUffer.append(s3),三個鎖,可以被消除

3.鎖粗化

同一個對象反復(fù)加鎖,那么加鎖同步范圍擴(kuò)大,還是上面的stringBUffer.append()),stringBUffer.append(s1),stringBUffer.append(s2),stringBUffer.append(s3),鎖粗化后只剩第一個鎖。

4.輕量級鎖(看書)

5.偏向鎖(看書)

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhijianhu/p/8811262.html

總結(jié)

以上是生活随笔為你收集整理的JVM第五部分 高效并发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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