對資源的訪問權限進行控制css
若是把一個資源(對象)比喻成屋子。就好像你進入了屋子鎖上了門。你家人和賊都進不去了。html
關鍵字:synchronized
介紹: 做爲在java中實現資源同步,「重量級」鎖。同步加鎖的是一個對象或者一個類,而不是代碼。
關鍵詞:volatile
介紹: 做爲Java中的輕量級鎖,當多線程中一個線程操做後能夠保證其餘線程可見,也就是書上所說的「可見性」,另一個就是「重排序」。
關鍵詞:ReentrantLock(在JDK1.5中java.util.concurrent.*包,此包有一些併發操做的類庫)
介紹: ReentrantLock,這個鎖主要是能顯示的添加鎖和釋放鎖,好處是更加靈活,可以更加準確的控制鎖,也能確保系統的穩定,好比說「重連」。
關鍵詞:軟件包 java.util.concurrent.locks
介紹:爲鎖和等待條件提供一個框架的接口和類,它不一樣於內置同步和監視器。
...
一:Java鎖Synchronized,對象鎖和類鎖舉例:(com.kuyu.study.LockStudy)java
二:synchronized關鍵字可標記方法和代碼塊:(com.kuyu.study.LockStudy)mysql
Java Synchronized,對象鎖和類鎖舉例:http://www.cnblogs.com/cangqiongbingchen/p/5806757.htmllinux
Java synchronized 介紹 :http://blog.csdn.net/suifeng3051/article/details/48711405sql
java synchronized關鍵字的用法:http://zhh9106.iteye.com/blog/2151791數據庫
死鎖是兩個甚至多個線程被永久阻塞時的一種運行局面。死鎖的緣由:因爲兩個甚至多個線程相互等待對方已被鎖定的資源。多線程
圖解死鎖:
Java死鎖範例以及如何分析死鎖:http://www.importnew.com/9668.html
JAVA實現的一個簡單的死鎖(附解釋):http://blog.csdn.net/zll793027848/article/details/8670546
活鎖是指線程1可使用資源,但它很禮貌,讓其餘線程先使用資源,線程2也可使用資源,但它很紳士,也讓其餘線程先使用資源。這樣你讓我,我讓你,最後兩個線程都沒法使用資源。併發
飢餓:是指若是線程T1佔用了資源R,線程T2又請求封鎖R,因而T2等待。T3也請求資源R,當T1釋放了R上的封鎖後,系統首先批准了T3的請求,T2仍然等待。而後T4又請求封鎖R,當T3釋放了R上的封鎖以後,系統又批准了T4的請求......,T2可能永遠等待。框架
自 Java 5 開始,java.util.concurrent.locks 包中包含了一些鎖的實現,所以你不用去實現本身的鎖了。可是你仍然須要去了解怎樣使用這些鎖。
Java多線程-鎖:http://www.linuxidc.com/Linux/2016-09/134801.htm
Java多線程之併發鎖:http://www.linuxidc.com/Linux/2012-03/57069.htm
Java多線程之多線程的鎖機制:http://www.linuxidc.com/Linux/2016-07/133403.htm
Java多線程併發鎖和原子操做,你真的瞭解嗎?:http://blog.csdn.net/luohuacanyue/article/details/7796352
mysql 鎖:http://blog.csdn.net/xifeijian/article/details/20313977
數據庫鎖:http://www.cnblogs.com/zhouqianhua/archive/2011/04/15/2017049.html
數據庫是一個多用戶使用的共享資源。當多個用戶併發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的狀況。若對併發操做不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。 加鎖是實現數據庫併發控制的一個很是重要的技術。當事務在對某個數據對象進行操做前,先向系統發出請求,對其加鎖。加鎖後事務就對該數據對象有了必定的控制,在該事務釋放鎖以前,其餘的事務不能對此數據對象進行更新操做。
共享(S)鎖:多個事務可封鎖一個共享頁;任何事務都不能修改該頁; 一般是該頁被讀取完畢,S鎖當即被釋放。
排它(X)鎖:僅容許一個事務封鎖此頁;其餘任何事務必須等到X鎖被釋放才能對該頁進行訪問;X鎖一直到事務結束才能被釋放。
更新(U)鎖:更新鎖在修改操做的初始化階段用來鎖定可能要被修改的資源,這樣能夠避免使用共享鎖形成的死鎖現象。
由於使用共享鎖時,修改數據的操做分爲兩步,首先得到一個共享鎖,讀取數據,而後將共享鎖升級爲排它鎖,而後再執行修改操做。這樣若是同時有兩個或多個事務同時對一個事務申請了共享鎖,在修改數據的時候,這些事務都要將共享鎖升級爲排它鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就形成了死鎖。若是一個數據在修改前直接申請更新鎖,在數據修改的時候再升級爲排它鎖,就能夠避免死鎖。
鎖定在較小的粒度的資源 --行 ,增大系統併發量,同時也增大系統開銷。維護鎖多
鎖定在較大的粒度的資源 --表 ,下降系統併發量,同時也下降系統開銷。維護鎖少
轉自http://res.kuyumall.com/document/java/html/lock.html