欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java并發(fā)編程如何降低鎖粒度并實現(xiàn)性能優(yōu)化-創(chuàng)新互聯(lián)

在高負載多線程應用中性能是非常重要的。為了達到更好的性能,開發(fā)者必須意識到并發(fā)的重要性。當我們需要使用并發(fā)時, 常常有一個資源必須被兩個或多個線程共享。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供南山網(wǎng)站建設、南山做網(wǎng)站、南山網(wǎng)站設計、南山網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、南山企業(yè)網(wǎng)站模板建站服務,十多年南山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

在這種情況下,就存在一個競爭條件,也就是其中一個線程可以得到鎖(鎖與特定資源綁定),其他想要得到鎖的線程會被阻塞。這個同步機制的實現(xiàn)是有代價的,為了向你提供一個好用的同步模型,JVM和操作系統(tǒng)都要消耗資源。有三個最重要的因素使并發(fā)的實現(xiàn)會消耗大量資源,它們是:

上下文切換
內(nèi)存同步
阻塞
為了寫出針對同步的優(yōu)化代碼,你必須認識到這三個因素以及如何減少它們。在寫這樣的代碼時你需要注意很多東西。在本文中,我會向你介紹一種通過降低鎖粒度的技術來減少這些因素。
讓我們從一個基本原則開始:不要長時間持有不必要的鎖。

在獲得鎖之前做完所有需要做的事,只把鎖用在需要同步的資源上,用完之后立即釋放它。我們來看一個簡單的例子:

public class HelloSync {
private Map dictionary = new HashMap();
public synchronized void borringDeveloper(String key, String value) {
long startTime = (new java.util.Date()).getTime();
value = value + "_"+startTime;
dictionary.put(key, value);
System.out.println("I did this in "+
((new java.util.Date()).getTime() - startTime)+" miliseconds");
}
}
在這個例子中,我們違反了基本原則,因為我們創(chuàng)建了兩個Date對象,調(diào)用了System.out.println(),還做了很多次String連接操作,但唯一需要做同步的操作是“dictionary.put(key, value);”。讓我們來修改代碼,把同步方法變成只包含這句的同步塊,得到下面更優(yōu)化的代碼:

public class HelloSync {
private Map dictionary = new HashMap();
public void borringDeveloper(String key, String value) {
long startTime = (new java.util.Date()).getTime();
value = value + "_"+startTime;
synchronized (dictionary) {
dictionary.put(key, value);
}
System.out.println("I did this in "+
((new java.util.Date()).getTime() - startTime)+" miliseconds");
}
}
上面的代碼可以進一步優(yōu)化,但這里只想傳達出這種想法。如果你對如何進一步優(yōu)化感興趣,請參考java.util.concurrent.ConcurrentHashMap.

那么,我們怎么降低鎖粒度呢?簡單來說,就是通過盡可能少的請求鎖?;镜南敕ㄊ?,分別用不同的鎖來保護同一個類中多個獨立的狀態(tài)變量,而不是對整個類域只使用一個鎖。我們來看下面這個我在很多應用中見到過的簡單例子:

public class Grocery {
private final ArrayList fruits = new ArrayList();
private final ArrayList vegetables = new ArrayList();
public synchronized void addFruit(int index, String fruit) {
fruits.add(index, fruit);
}
public synchronized void removeFruit(int index) {
fruits.remove(index);
}
public synchronized void addVegetable(int index, String vegetable) {
vegetables.add(index, vegetable);
}
public synchronized void removeVegetable(int index) {
vegetables.remove(index);
}
}
雜貨店主可以對他的雜貨鋪中的蔬菜和水果進行添加/刪除操作。上面對雜貨鋪的實現(xiàn),通過基本的Grocery 鎖來保護fruits和vegetables,因為同步是在方法域完成的。事實上,我們可以不使用這個大范圍的鎖,而是針對每個資源(fruits和vegetables)分別使用一個鎖。來看一下改進后的代碼:

public class Grocery {
private final ArrayList fruits = new ArrayList();
private final ArrayList vegetables = new ArrayList();
public void addFruit(int index, String fruit) {
synchronized(fruits) fruits.add(index, fruit);
}
public void removeFruit(int index) {
synchronized(fruits) {fruits.remove(index);}
}
public void addVegetable(int index, String vegetable) {
synchronized(vegetables) vegetables.add(index, vegetable);
}
public void removeVegetable(int index) {
synchronized(vegetables) vegetables.remove(index);
}
}
在使用了兩個鎖后(把鎖分離),我們會發(fā)現(xiàn)比起之前用一個整體鎖,鎖阻塞的情況更少了。當我們把這個技術用在有中度鎖爭搶的鎖上時,優(yōu)化提升會更明顯。如果把該方法應用到輕微鎖爭搶的鎖上,改進雖然比較小,但還是有效果的。但是如果把它用在有重度鎖爭搶的鎖上時,你必須認識到結果并非總是更好。

請有選擇性的使用這個技術。如果你懷疑一個鎖是重度爭搶鎖請按下面的方法來確認是否使用上面的技術:

確認你的產(chǎn)品會有多少爭搶度,將這個爭搶度乘以三倍或五倍(甚至10倍,如果你想準備的萬無一失)
基于這個爭搶度做適當?shù)臏y試
比較兩種方案的測試結果,然后挑選出最合適的.
用于改進同步性能的技術還有很多,但對所有的技術來說最基本的原則只有一個:不要長時間持有不必要的鎖。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)站名稱:Java并發(fā)編程如何降低鎖粒度并實現(xiàn)性能優(yōu)化-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://aaarwkj.com/article42/dshghc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、響應式網(wǎng)站軟件開發(fā)、服務器托管品牌網(wǎng)站制作、移動網(wǎng)站建設

廣告

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

成都做網(wǎng)站
国产美女主播在线精品一区| 少妇的诱惑免费在线看| 午夜av一区二区三区| 97视频免费观看在线| 熟女俱乐部五十路六十路| 国产乱码精品免费一区二区av | 国产男生午夜福利网站| 国产亚洲欧美日韩精品| 欧美午夜视频一区二区福利| 五月爱婷婷六月爱丁香色| 日本亚洲美丽少妇天堂| 亚洲丰满毛茸茸毛茸茸| 精品一区二区三区乱码中文| 一区二区三区高清人妻日本| 亚洲综合中文字幕久久网址| 久久最新最热视频精品| 麻豆国产97在线精品一区| 99亚洲综合一区二区三区| 精品欧美国产日韩在线观看| 国语自产精品视频在线不卡| 日韩精品一区二区一牛| 亚洲一区二区三区精品乱码| 国产69精品久久久久久人| 欧美日韩国产激情另类| 亚洲精品香蕉久久情趣| 成人在线视频国产自拍| 熟女乱熟乱熟妇综合网二区| 18禁视频免费无遮挡| 国产激情小网站免费看| 午夜福利精品在线观看| 国产福利91精品一区二区三| 久久五月婷婷爱综合亚洲| 福利在线午夜绝顶三级| 欧美生活一区二区三区| 少妇按摩高潮呻吟av| 婷婷人妻中文字幕在线| 亚洲欧美日韩专区一区| 亚洲一区二区色黄大片| 免费观看欧美日韩论理电影| 一区二区中文字幕日本韩国| 最新日韩欧美不卡一二三区|