Synchronized的兩種用法

2021-09-09 07:34:05 字數 3051 閱讀 1849

1.物件鎖

public class demo3 implements runnable

system.out.println("finished");

} @override

public void run()

public synchronized void method() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"已經執行結束");

} }}

執行結果:

現在是物件方法鎖的形式:thread-0

thread-0已經執行結束

現在是物件方法鎖的形式:thread-1

thread-1已經執行結束

finished

public class demo2 implements runnable

system.out.println("finished");

} @override

public void run() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"已經執行結束");

} }}

public class demo2 implements runnable

system.out.println("finished");

} @override

public void run() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"object1已經執行結束");

} synchronized(object1) catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"object2已經執行結束");

}}}

兩個同步**塊鎖定是同乙個例項,執行結果;

現在是object1:thread-0

thread-0object1已經執行結束

現在是object1:thread-1

thread-1object1已經執行結束

現在是object2:thread-1

thread-1object2已經執行結束

現在是object2:thread-0

thread-0object2已經執行結束

finished

public class demo2 implements runnable

system.out.println("finished");

} @override

public void run() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"object1已經執行結束");

} synchronized(object2) catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"object2已經執行結束");

}}}

兩個同步**塊鎖定是不同例項,執行結果:

現在是object1:thread-0

thread-0object1已經執行結束

現在是object1:thread-1

現在是object2:thread-0

thread-0object2已經執行結束

thread-1object1已經執行結束

現在是object2:thread-1

thread-1object2已經執行結束

finished

總結:**塊形式:手動指定鎖物件

方發鎖形式:synchronized修飾普通方法,鎖物件預設為this.

2.類鎖概念

兩種形式

synchronized修飾靜態的方法

public class demo4 implements runnable

system.out.println("finished");

} @override

public void run()

public **static** synchronized void method() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"已經執行結束");

} }

執行結果:

現在是物件方法鎖的形式:thread-0

thread-0已經執行結束

現在是物件方法鎖的形式:thread-1

thread-1已經執行結束

finished

2. 指定鎖為class物件

public class demo5 implements runnable

system.out.println("finished");

} @override

public void run()

private void method() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"已經執行結束");}}

}

執行結果:

thread-0已經執行結束

現在是物件方法鎖的形式:thread-1

thread-1已經執行結束

finished

mysql的兩種引擎 mysql的兩種儲存引擎

背景 最近在使用spring data jpa操作mysql,在使用jpa的自動建表功能之後,處理多對多關係 manytomany的時候,spring data jpa會給中間表的兩個欄位都加上外來鍵引用。當前使用的版本預設的資料庫儲存引擎為myisam。這種儲存引擎是為資料庫查詢效能而生的,不支援...

Divide Two Integers 的兩種解法

divide two integers without using multiplication,division and mod operator.if it is overflow,return max int.解題思路 1.通過被除數減去除數來得到被除數中包含多少個除數,一直減到被除數小於等於...

MyBatis collection的兩種形式

與association一樣,collection元素也有兩種形式,現介紹如下 一 巢狀的resultmap 查詢教師及其指導的學生的資訊。由於教師 學生都有 id name gender等屬性,因此給教師的字段都起了別名 select t.id t id,t.name t name,t.gende...