1、公平鎖:多個執行緒之間可以按照執行緒申請鎖的順序獲取鎖;
2、非公平鎖:多個執行緒之間獲取鎖的順序不一定按照申請鎖的順序獲得;synchronized、reentrantlock預設是非公平鎖,後者可以通過構造引數獲取公平鎖。
3、可重入鎖又叫遞迴鎖:是指在乙個同步方法內部呼叫另外乙個同步方法時,獲得的鎖是同一把鎖,避免死鎖;舉例如下:
public class testlock
public synchronized void world()
public static void main(string args) , string.valueof(i)).start();}}
}
列印結果:
0 測試遞迴鎖
0 測試遞迴鎖2
6 測試遞迴鎖
6 測試遞迴鎖2
4 測試遞迴鎖
4 測試遞迴鎖2
5 測試遞迴鎖
5 測試遞迴鎖2
3 測試遞迴鎖
3 測試遞迴鎖2
2 測試遞迴鎖
2 測試遞迴鎖2
1 測試遞迴鎖
1 測試遞迴鎖2
9 測試遞迴鎖
9 測試遞迴鎖2
8 測試遞迴鎖
8 測試遞迴鎖2
7 測試遞迴鎖
7 測試遞迴鎖2
hello方法和world方法總是一起執行
4、自旋鎖:是指獲取鎖的執行緒不會立即阻塞,而是利用迴圈比較的方式去獲取鎖,好處就是減少上下文切換,缺點是迴圈比較會消耗cpu的效能,舉例如下:
public class testlock2
system.out.println(thread.getname() + "\t come in");
}public void unlock()
public static void main(string args) catch (interruptedexception e) finally
}, string.valueof(i)).start();}}
}
列印結果:
0 come in
0 come out
6 come in
6 come out
4 come in
4 come out
2 come in
2 come out
9 come in
9 come out
8 come in
8 come out
7 come in
7 come out
1 come in
1 come out
5 come in
5 come out
3 come in
3 come out
取得了獲取鎖,釋放鎖的效果
5、獨佔鎖:一次只能被乙個執行緒擁有;共享鎖:一次可以被多個執行緒共有;其中讀讀是共享,寫讀、讀寫、寫寫都互斥
舉例如下:
public class testlock3 catch (exception e) finally
return value;
}/**
* 寫互斥
** @param key
* @param value
* @return
*/public boolean setparams(string key, object value)
try catch (exception e) finally
return true;
}public static void main(string args) , string.valueof(i)).start();
}//先讓寫執行緒進行
try catch (interruptedexception e)
//多執行緒讀
for (int i = 0; i < 10; i++) , string.valueof(i)).start();}}
}
我所認識的ELK Stack
聽說elk stack最近很火,於是我抱著試試看的態度去市場了解了一番,發現現在很多公司都在使用這個東西處理日誌,而且成為實時日誌處理領域的第一選擇,於是我就去官網認真的學習了一番。elk stack這個東西是 elasticsearch logstash kibana 三個開源軟體的組合,在實時資...
我所認識的HTML
html hypetext mark language 超文字標記語言。如果把乙個web應用比喻為人,那麼html就是人體的骨骼。對於html的學習,我覺得要有以下幾個方面的認識和理解 用途 背景 規範制定和維護組織 語言本身 語法,api 其他一些常見問題 相關鏈結 起初,用來語義化描述科學文件,...
我所認識的父親們
一次去探望來京打工的老鄉,在他租住的僅有三四十平方公尺的簡陋寓所裡正在拉家常時,一位眉目慈善的中年男人熱情地跟我們打著招呼進來了,老鄉介紹說這是住在他隔壁的房客。隨即男人便坐下來和我們聊了起來。在閒聊中得知男人今年已經五十歲了,是南方人,也是在北京打工。我好奇地問他已是知天命的年紀了,為何還要在離家...