可參考
同步方法:
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...