1. 程式人生 > >JUC學習筆記(3)—Lock鎖

JUC學習筆記(3)—Lock鎖

一個物件裡面如果有多個synchronized方法,某一個時刻內,只要一個執行緒去呼叫其中的一個synchronized方法了,其它的執行緒都只能等待,換句話說,某一個時刻內,只能有唯一一個執行緒去訪問這些synchronized方法鎖的是當前物件this,被鎖定後,其它的執行緒都不能進入到當前物件的其它的synchronized方法 加個普通方法後發現和同步鎖無關換成兩個物件後,不是同一把鎖了,情況立刻變化。 鎖定的是當前物件this,類鎖,鎖定的是整個class,是兩個不同的物件

都換成靜態同步方法後,情況又變化所有的非靜態同步方法用的都是同一把鎖——例項物件本身,也就是說如果一個例項物件的非靜態同步方法獲取鎖後,該例項物件的其他非靜態同步方法必須等待獲取鎖的方法釋放鎖後才能獲取鎖,可是別的例項物件的非靜態同步方法因為跟該例項物件的非靜態同步方法用的是不同的鎖,所以毋須等待該例項物件已獲取鎖的非靜態同步方法釋放鎖就可以獲取他們自己的鎖。

所有的靜態同步方法用的也是同一把鎖——類物件本身,這兩把鎖是兩個不同的物件,所以靜態同步方法與非靜態同步方法之間是不會有競態條件的。但是一旦一個靜態同步方法獲取鎖後,其他的靜態同步方法都必須等待該方法釋放鎖後才能獲取鎖,

public class Lock2
{
	public static void main(String[] args) throws Exception
	{
		Phone phone = new Phone();
		Phone phone2 = new Phone();
		
		new Thread(() -> {
			try 
			{
				phone.sendSMS();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}, "A").start();
		
		Thread.sleep(100);
		
		new Thread(() -> {
			try 
			{
				//phone.sendEmail();
				//phone.openPC();
				phone2.sendEmail();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}, "B").start();		
		
	}
}


class Phone//  Phone.class
{
	public static synchronized void sendSMS() throws Exception
	{
		TimeUnit.SECONDS.sleep(4);
		System.out.println("--------------sendSMS");
	}
	
	public synchronized void sendEmail() throws Exception
	{
		System.out.println("--------------sendEmail");
	}
	
	public void openPC()
	{
		System.out.println("--------------openPC");
	}
}

相關推薦

JUC學習筆記3Lock

一個物件裡面如果有多個synchronized方法,某一個時刻內,只要一個執行緒去呼叫其中的一個synchronized方法了,其它的執行緒都只能等待,換句話說,某一個時刻內,只能有唯一一個執行緒去訪問這些synchronized方法鎖的是當前物件this,被鎖定後,其它的執

TCP/IP詳解學習筆記3IP協議ARP協議和RARP協議

out 處理機 傳輸 包含 發送 res 這也 進行 默認 把這三個協議放到一起學習是因為這三個協議處於同一層,ARP協議用來找到目標主機的Ethernet網卡Mac地址,IP則承載要發送的消息。數據鏈路層可以從ARP得到數據的傳送信息,而從IP得到要傳輸的數據信息。   

spring學習筆記3——bean配置細節註意

collect 1.5 之前 ice ble person name return 引用 1. 一個bean引用另外一個bean 當Person類中有一個屬性是Car,那麽該如何配置呢 person: package com.zj.spring; public class

QT學習筆記3 我的第一個程序

9.png har 中文 gets 有一個 setw 通過 坐標 關系 今天,學習搭建一個空項目,了解程序是如何運行的。 (1)新建一個空項目   1、在創建完空項目之後,項目中只有一個空的項目文件( .pro)        2、然後需要在項目文件(.pro)中添加:

Hibernate學習筆記3---hibernate關聯關系映射

gen -m type foreign out eas ner 機制 路徑 一對一關聯 假設有兩個持久化類(實體類)User與Address,它們之間存在一對一的關系 1,通過主鍵關聯(個人偏向另外一種) User.hbm.xml文件配置 <id name="u

C++深度解析教程學習筆記3函數的擴展

插入 分享 技術 lsp 預處理器 _for 返回 忽略 結合 1.內聯函數 1.1.常量與宏的回顧 (1)C++中的 const 常量可以替代宏常數定義,如: const int A = 3; //等價於 #define A 3 (2)C++中是否有解決方案,可以用來

shell學習筆記3

shell 基礎 雜記if 一、if基礎 1、單分支 1.1 語法 if語句語法 單分支結構語法: if [條件]; then 指令 fi 或 if [條件] then 指令 fi 1.2 例子 [roo

Python學習筆記3

python重要的數據類型Dict和Setdict通過key 查找value(key和value關聯)花括號{ }表示這是一個dict,然後按照key:value,寫出來即可。最後一個key:value的都好可以省略 註意: 單元素的tuple必須在後面多家加一個逗號dict最後的逗號可以省略由於dict也是

莫煩大大TensorFlow學習筆記3----建立神經網絡

nbsp 定義數據 學習筆記 variables ati 選擇 mea 有變 plus 1、def add_layer() 添加神經網絡層: import tensorflow as tf def add_layer( inputs, in_size, out_si

jQuery 學習筆記3內容選擇器、attr方法、prop方法,類的操作

節點 lec ddc 方法 pty 全部 如果 一個 所有 內容選擇器: 1、$("div:empty"): 空的div元素 2、$("div:parent"): 非空div元素 3、$("div:contains(text)"): 包含 text 文本(指定文本)的div

Java暑期學習筆記3

ring out 顯示 字節數 順序 作用 提示 string轉換 gbk # 2018.7.11 # * 1.匿名內部類(只針對重寫一個方法時候使用,不能向下轉型,因為沒有子類類名) * new Inter(){ public

VBA二次學習筆記3——批量合並單元格

false spl png next com src 了吧 merge 昨天 說明(2018-9-16 22:17:49): 1. 昨天運動會,100米八個人跑了第五,400米五個人跑了第三,得了個榨汁機。終於結束了哈哈哈!之前一個星期緊張的天天拉肚子,真是沒出息。。不過養

javaweb-servlet學習筆記3

tps 技術分享 tex 周期 目錄 tom text let 垃圾 servlet的生命周期要經過:實例化,初始化,提供服務,銷毀,回收五個階段。 1.當用戶訪問一個路徑,該路徑對應的servlet被調用的時Servlet就會被實例化。且無論訪問多少次servlet,其

Spring入門學習筆記3——事件處理類

aware super 不能 href his 應用 odi eap app 目錄 Spring中的事件處理 Spring內建事件 監聽Context事件 Example 自定義Spring事件 Spring中的事件處理 ApplicationContext 是Spr

TCP/IP學習筆記3----IP,ARP,RARP協議

ip地址 讀取 出現 請求 直接 ip學習筆記 mac height ttl 把這三個協議放到一起學習是因為這三個協議處於同一層(網絡層協議),ARP協議用來找到目標主機的Ethernet網卡Mac地址,IP則承載要發送的消息。數據鏈路層可以從ARP得到數據的傳送信息,而從

Linux學習筆記3linux服務管理與啟停

重啟 禁用 multi etc 刪除服務 shel ive 系統 運行級別 一、LINUX 系統服務管理 1、RHEL/OEL 6.X及之前   service命令用於對系統服務進行管理,比如啟動(start)、停止(stop)、重啟(restart)、查看狀態(statu

Html學習筆記3

認識標籤 <a>標籤連結到另一個頁面,語法: <a href="目標網址" title="滑鼠滑過顯示的文字">連結顯示的文字</a> 只要為文字加入a標籤後,文字的顏色就會自動變為藍色(被點選過的文字顏色為紫色),通過C

go學習筆記3 -- package fmt

 package fmt fmt包實現了格式化的I/O函式,這點類似C語言中的printf和scanf,但是更加簡單,其中的格式“佔位符”衍生自 C 佔位符 一般佔位符 布林佔位符 浮點數及其複合構成佔位符 指標 fmt中的方法: // Print 將引數列表

開源容器openshift學習筆記3:新增Image Stream

開篇之前如果沒有安裝openshift環境可以參考我的博文:centos7下安裝openshift 本系列部落格學習筆記參考《開源容器雲openshift》一書:下載連線:https://download.csdn.net/download/u012371097/10745382  

cesium 學習筆記32018.6.11

1.cesium取色方法: Cesium.Color(red, green, blue, alpha) red, green, blue, alpha的取值範圍都是0到1 2.cesium取色方法2: Cesium.Color.fromRgba(0x67ADDFFF); 3.隨