同步靜態方法與同步非靜態方法

2021-07-10 21:38:17 字數 1216 閱讀 4167

可參考

同步方法:

1):同步靜態方法:某個類object中的某個靜態方法staticmethod加上同步鎖之後,當某個執行緒thread呼叫staticmethod時該執行緒會獲取object類的鎖(當前object的鎖沒被其它執行緒獲取時,若當前object鎖被其它鎖獲取則會進行等待。),此時其他任何執行緒在thread釋放鎖前都無法呼叫object類中任何的同步靜態方法。

2):同步非靜態方法:某個類object中的某個非靜態方法method加上同步鎖之後,當某個執行緒thread呼叫method時會獲取所對應的object物件的鎖,此時其他執行緒在thread釋放鎖前都無法呼叫改物件中的任何同步非靜態方法(所有非靜態同步方法都共用其所屬的物件的鎖)

3):兩者區別:

前提:object 中包含靜態同步方法staticmethod01,staticmethod02 , 非靜態同步方法method01 , method02,執行緒thread1 和 thread2:

object obj1 = new object();

object obj2 = new object();

**a.當thread1呼叫obj1.method01()時,若thread2想呼叫obj1.method01()或者obj1.method01()都需要先等待obj1.method01()執行完釋放鎖才能進行呼叫。

b.當thread1呼叫obj1.method01()時,thread2可以不用等待thread01釋放鎖即可呼叫obj2.method01()或者 obj2.method02();**

因為非靜態同步方法的鎖是相對於物件而言。

c.當thread1 呼叫obj1.staticmethod01()時,thread2不管是呼叫obj1.staticme01()還是obj2.staticmethod01()都需要等待thread1釋放鎖後才能進行呼叫。

因為靜態同步方法的鎖是相對於類而言

public

class

count

//同步的非靜態方法

public

synchronized

void

addcount()

@override

public string tostring()

}public

class

test

}).start();}}

}

同步方法 非靜態

1 不要在run 方法上面新增synchronized 2 同步方法 鎖是 this 還要要求 鎖是 唯一的 同步方法要寫在資源類裡面 3 注意處理下面的run方法和saleticket 方法的關係 4 package com.qf.demo public class test3 同步方法 auth...

同步靜態方法

1 鎖 是資源類物件,同步方法,方法要寫在資源類中 2 資源類如果是單寫的,沒有實現runnable介面.同步方法要寫在資源類中,鎖要求唯一,靜態的同步方法,使用的鎖是card2.class 3 解釋類.class jvm 再去使用指定類 給每乙個類建立乙個 唯一的class 物件,也就是說每個類有...

同步靜態方法

同步靜態方法 修飾靜態方法,作用於當前類物件加鎖,進入同步 前要獲得當前類物件的鎖 同步監視器是當前類物件class c date.class private static int num 0 public static synchronized void add catch interrupted...