1、synchronized關(guān)鍵字的作用域有二種:
1)是某個(gè)對象實(shí)例內(nèi),synchronized aMethod(){}可以防止多個(gè)線程同時(shí)訪問這個(gè)對象的synchronized方法(如果一個(gè)對象有多個(gè)synchronized方法,只要一個(gè)線程訪問了其中的一個(gè)synchronized方法,其它線程不能同時(shí)訪問這個(gè)對象中任何一個(gè)synchronized方法)。這時(shí),不同的對象實(shí)例的synchronized方法是不相干擾的。也就是說,其它線程照樣可以同時(shí)訪問相同類的另一個(gè)對象實(shí)例中的synchronized方法;
2)是某個(gè)類的范圍,synchronized static aStaticMethod{}防止多個(gè)線程同時(shí)訪問這個(gè)類中的synchronized static 方法。它可以對類的所有對象實(shí)例起作用。
2、除了方法前用synchronized關(guān)鍵字,synchronized關(guān)鍵字還可以用于方法中的某個(gè)區(qū)塊中,表示只對這個(gè)區(qū)塊的資源實(shí)行互斥訪問。用法是: synchronized(this){/*區(qū)塊*/},它的作用域是當(dāng)前對象;
3、synchronized關(guān)鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中并不自動(dòng)是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個(gè)方法為synchronized方法;
對整個(gè)類范圍的某塊資源實(shí)行synchronized,唯一的方法是用:synchronized static方法,像這樣:synchronized static void ff(){/*your code here*/}
在類的一個(gè)方法中,可以存在整個(gè)類范圍內(nèi)的synchronized區(qū)塊,像這樣:??????? 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;
}
}
--------------------------------
??? /*
???? * 此處實(shí)現(xiàn)同步方式是因?yàn)槎嘤脩粽{(diào)整菜單時(shí)線程不安全方式下會(huì)發(fā)生臟數(shù)據(jù)的情況。
???? */
??? private synchronized void insertNewMultJava(Java java) {
??????? try {
??????????? this.cms.insertJava(java, false);
??????? } catch (Exception e) {
????????? e.printStackTrace();
??????? }
??? }
1)是某個(gè)對象實(shí)例內(nèi),synchronized aMethod(){}可以防止多個(gè)線程同時(shí)訪問這個(gè)對象的synchronized方法(如果一個(gè)對象有多個(gè)synchronized方法,只要一個(gè)線程訪問了其中的一個(gè)synchronized方法,其它線程不能同時(shí)訪問這個(gè)對象中任何一個(gè)synchronized方法)。這時(shí),不同的對象實(shí)例的synchronized方法是不相干擾的。也就是說,其它線程照樣可以同時(shí)訪問相同類的另一個(gè)對象實(shí)例中的synchronized方法;
2)是某個(gè)類的范圍,synchronized static aStaticMethod{}防止多個(gè)線程同時(shí)訪問這個(gè)類中的synchronized static 方法。它可以對類的所有對象實(shí)例起作用。
2、除了方法前用synchronized關(guān)鍵字,synchronized關(guān)鍵字還可以用于方法中的某個(gè)區(qū)塊中,表示只對這個(gè)區(qū)塊的資源實(shí)行互斥訪問。用法是: synchronized(this){/*區(qū)塊*/},它的作用域是當(dāng)前對象;
3、synchronized關(guān)鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中并不自動(dòng)是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個(gè)方法為synchronized方法;
對整個(gè)類范圍的某塊資源實(shí)行synchronized,唯一的方法是用:synchronized static方法,像這樣:synchronized static void ff(){/*your code here*/}
在類的一個(gè)方法中,可以存在整個(gè)類范圍內(nèi)的synchronized區(qū)塊,像這樣:??????? 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;
}
}
--------------------------------
??? /*
???? * 此處實(shí)現(xiàn)同步方式是因?yàn)槎嘤脩粽{(diào)整菜單時(shí)線程不安全方式下會(huì)發(fā)生臟數(shù)據(jù)的情況。
???? */
??? private synchronized void insertNewMultJava(Java java) {
??????? try {
??????????? this.cms.insertJava(java, false);
??????? } catch (Exception e) {
????????? e.printStackTrace();
??????? }
??? }
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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