012 內建鎖和synchronized

2022-09-14 05:48:08 字數 1163 閱讀 4153

一 . 概述

在前面我們說到執行緒安全性問題解決的核心就是同步,同步的核心就是保證原子性.

在j**a之中最早就支援語法層面的同步解決了,並且提供了synchronized的方式解決問題.

二 .內建鎖

在j**a之中每乙個物件都是乙個內建鎖,這個在jvm的體系之中就規定好了.

內建鎖的規定也就決定我們可以拿任意的物件進行同步操作.

內建鎖常常配合synchronized使用.

三 .synchronized 

常見的synchronized的使用方式有三種:

[1]在靜態方法中使用

[2]在例項方法中使用

[3]在同步**塊之中使用

其中: 在靜態方法之中的內建鎖是該類的class物件,例項方法的內建鎖是呼叫該方法的例項物件.

在同步**塊之中的內建鎖需要顯示的指定.

四 . 例子

將我們之前的計數**進行改寫,變成執行緒安全的操作. 

public

class

problemsolve

}});

thread t2 = new thread(new

runnable()

}});

t1.start();

t2.start();

t1.join();

t2.join();

system.

out.println("

獲取最終的結果count :

" +demo.count);

}private

synchronized

void

add()

}

五 .分析

當我們的**進入同步**的時候,會試圖獲取內建鎖.

獲取成功: 繼續執行

獲取失敗: 進入該內建所的阻塞佇列.直到獲取該所的執行緒完成任務或者自己釋放內建所的擁有權.

然後阻塞佇列的執行緒重新進入runnable狀態,再此嘗試獲取該鎖.

以上就是synchronized同步的底層執行方式.

六. synchronized的優劣

優勢 : 保證原子性,因為同步的**僅僅只有乙個執行緒可以執行.

劣勢: 粒度過大,獲取不到內建鎖的執行緒會進入阻塞佇列等待喚醒,這個是一刀切的方式,很有可能會影響效能.

JAVA多執行緒顯示鎖和內建鎖

一 內建鎖 synchronized 1 內建鎖的獲得鎖和釋放鎖是隱式的,進入synchrnozied修飾的 要獲得鎖,走出相應的 要釋放鎖。2 與synchronized配套使用的執行緒通訊方式 wait notify notifyall wait會立刻釋放當前鎖,並進入等待狀態,等待的到相應的n...

012講else with easygui和模組

一.else 語句 1.if else 2.while 執行break,不執行else if 不執行break,執行else break else 3.try except error as reason print reason 執行except,不執行else else 不執行except,執行...

synchronized內建鎖詳解

synchronized內建鎖詳解 多執行緒訪問同一共享可變資源的情況下,會出現執行緒不安全問題,經典案例購買火車票 public class testthread2 public void getticket system.out.println thread.currentthread getn...