保證數(shù)據(jù)安全,處理多用戶并發(fā)訪問。悲觀鎖,鎖如其名,他對世界是悲觀的,他認為別人訪問正在改變的數(shù)據(jù)的概率是很高的,所以從數(shù)據(jù)開始更改時就將數(shù)據(jù)鎖住,知道更改完成才釋放。樂觀鎖,他對世界比較樂觀,認為別人訪問正在改變的數(shù)據(jù)的概率是很低的,所以直到修改完成準備提交所做的的修改到數(shù)據(jù)庫的時候才會將數(shù)據(jù)鎖住。完成更改后釋放。悲觀鎖會造成訪問數(shù)據(jù)庫時間較長,并發(fā)性不好,特別是長事務(wù)。樂觀鎖在現(xiàn)實中使用得較多,廠商較多采用。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、安多ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的安多網(wǎng)站制作公司
悲觀鎖(Pessimistic Lock), 顧名思義,就是很悲觀,每次去拿數(shù)據(jù)的時候都認為別人會修改,所以每次在拿數(shù)據(jù)的時候都會上鎖,這樣別人想拿這個數(shù)據(jù)就會block直到它拿到鎖。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫里邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。
假如要按照你這種 悲觀鎖 的處理機制的話, 那么
Connection conn 要定義在外面, 也就是類這個級別。
例如
public class Test {
Connection conn;
public Product get(id) {
conn = getConn();
conn.startTraction();
...............select * from product where id = 10 for update;
}
public void update(long id) {
// 這個時候, 用類一個級別的 Conn , 不用新建
update product set name = 'xxx' where id = :id;
// 更新完畢后
Commit 事務(wù)。
關(guān)閉 Conn.
}
}
上面的只是 原理的 例子, 實際情況下,不推薦這么寫
因為 如果有人 只 Product get(id) 不 update(long id) 的話, 事情就麻煩了。
樂觀鎖和悲觀鎖的區(qū)別如下:
1、悲觀鎖是當線程拿到資源時,就對資源上鎖,并在提交后,才釋放鎖資源,其他線程才能使用資源。
2、樂觀鎖是當線程拿到資源時,上樂觀鎖,在提交之前,其他的鎖也可以操作這個資源,當有沖突的時候,并發(fā)機制會保留前一個提交,打回后一個提交,讓后一個線程重新獲取資源后,再操作,然后提交。和git上傳代碼一樣,兩個線程都不是直接獲取資源本身,而是先獲取資源的兩個copy版本,然后在這兩個copy版本上修改。
3、悲觀鎖和樂觀鎖在并發(fā)量低的時候,性能差不多,但是在并發(fā)量高的時候,樂觀鎖的性能遠遠優(yōu)于悲觀鎖。
4、常用的synchronized是悲觀鎖,lock是樂觀鎖。
網(wǎng)站欄目:java代碼加悲觀鎖,java 樂觀鎖代碼
分享鏈接:http://chinadenli.net/article44/hsgehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、微信小程序、電子商務(wù)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)