1、synchronized關鍵字的作用域有二種:
1)是某個對象實例內,synchronized aMethod(){}可以防止多個線程同時訪問這個對象的synchronized方法(如果一個對象有多個synchronized方法,只要一個線程訪問了其中的一個synchronized方法,其它線程不能同時訪問這個對象中任何一個synchronized方法)。這時,不同的對象實例的synchronized方法是不相干擾的。也就是說,其它線程照樣可以同時訪問相同類的另一個對象實例中的synchronized方法;
2)是某個類的范圍,synchronized static aStaticMethod{}防止多個線程同時訪問這個類中的synchronized static 方法。它可以對類的所有對象實例起作用。
2、除了方法前用synchronized關鍵字,synchronized關鍵字還可以用于方法中的某個區塊中,表示只對這個區塊的資源實行互斥訪問。用法是: synchronized(this){/*區塊*/},它的作用域是當前對象;
3、synchronized關鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中并不自動是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個方法為synchronized方法;
對整個類范圍的某塊資源實行synchronized,唯一的方法是用:synchronized static方法,像這樣:synchronized static void ff(){/*your code here*/}
在類的一個方法中,可以存在整個類范圍內的synchronized區塊,像這樣:??????? synchronized (TestSynchronized.class) {/*some code*/}
The format below can implement synchronizing in Class scope:
synchronized (TestSynchronized.Class) {
}
---------------------------------------------
Integer count = 0;
synchronized (count) {
count++;
if (count > 10) {
count = 0;
}
if (count < 5) {
index = 0;
} else if (count <
{
index = 1;
} else {
index = 0;
}
}
--------------------------------
??? /*
???? * 此處實現同步方式是因為多用戶調整菜單時線程不安全方式下會發生臟數據的情況。
???? */
??? private synchronized void insertNewMultJava(Java java) {
??????? try {
??????????? this.cms.insertJava(java, false);
??????? } catch (Exception e) {
????????? e.printStackTrace();
??????? }
??? }
1)是某個對象實例內,synchronized aMethod(){}可以防止多個線程同時訪問這個對象的synchronized方法(如果一個對象有多個synchronized方法,只要一個線程訪問了其中的一個synchronized方法,其它線程不能同時訪問這個對象中任何一個synchronized方法)。這時,不同的對象實例的synchronized方法是不相干擾的。也就是說,其它線程照樣可以同時訪問相同類的另一個對象實例中的synchronized方法;
2)是某個類的范圍,synchronized static aStaticMethod{}防止多個線程同時訪問這個類中的synchronized static 方法。它可以對類的所有對象實例起作用。
2、除了方法前用synchronized關鍵字,synchronized關鍵字還可以用于方法中的某個區塊中,表示只對這個區塊的資源實行互斥訪問。用法是: synchronized(this){/*區塊*/},它的作用域是當前對象;
3、synchronized關鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中并不自動是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個方法為synchronized方法;
對整個類范圍的某塊資源實行synchronized,唯一的方法是用:synchronized static方法,像這樣:synchronized static void ff(){/*your code here*/}
在類的一個方法中,可以存在整個類范圍內的synchronized區塊,像這樣:??????? synchronized (TestSynchronized.class) {/*some code*/}
The format below can implement synchronizing in Class scope:
synchronized (TestSynchronized.Class) {
}
---------------------------------------------
Integer count = 0;
synchronized (count) {
count++;
if (count > 10) {
count = 0;
}
if (count < 5) {
index = 0;
} else if (count <

index = 1;
} else {
index = 0;
}
}
--------------------------------
??? /*
???? * 此處實現同步方式是因為多用戶調整菜單時線程不安全方式下會發生臟數據的情況。
???? */
??? private synchronized void insertNewMultJava(Java java) {
??????? try {
??????????? this.cms.insertJava(java, false);
??????? } catch (Exception e) {
????????? e.printStackTrace();
??????? }
??? }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
