java併發程式設計之Synchronized關鍵字

2021-07-22 22:54:30 字數 2010 閱讀 6744

1.synchronized關鍵字使用前介紹

(1)使用synchronized關鍵字修飾方法,ps:在這裡要特別需要注意的是,當有兩個或者以上執行緒的時候,其中有乙個執行緒獲取了該方法的物件鎖執行同步方法的時候,其他的執行緒仍然可以訪問其他的非使用synchronized的方法,也就是非同步的了。

(2)使用同步synchronized**塊的方法,也就是synchronized();ps:上面的ps對於這裡也是適用的,記住了。

2.我們怎麼去理解synchronized關鍵字呢?

我覺得這個也不難,我們並不需要長篇大論,就舉乙個很簡答的例子來說吧:有這樣的兩兄弟,叫做小明和小東,有一天,他們的媽媽給了他們一人乙個蘋果吃,(蘋果要削皮一定)但是他們家只有一把刀子,那麼只能是給乙個人先用了,(這裡的刀就相當於synchronized關鍵字了),乙個用完,下乙個才能用。但是小明在用的過程中,小東還可以吃其他不用削皮的水果是吧(這就是非同步)。通過這個例子是不是就明白了?

3.synchronized關鍵字使用的方法:

(1)修飾方法:synchronized public void sayhello() ;這裡的this表明的是當前的物件,那麼我們自定義的怎麼做呢?

synchronized(object)

} synchronized public void testmethodb()

}}建立兩個執行緒:

package com.zqu.yqy.scdn.test.test003;

public class newthread extends thread

public void run() catch (interruptedexception e) }}

package com.zqu.yqy.scdn.test.test003;

public class newthread01 extends thread

public void run()

}

執行的方法:

package com.zqu.yqy.scdn.test.test003;

public class run

}

結果:

然後我們修改乙個,不用synchronized修飾方法,用synchronized同步**塊的方式來:(其他的都一樣)

package com.zqu.yqy.scdn.test.test003;

public class mymethod }}

public void testmethodb()

} }

}

package com.zqu.yqy.scdn.test.test003;

public class mymethod }}

public void testmethodb()

} }

}

object那個需要你傳入物件,這裡就不多說了,後面談執行緒安全的單例模式的實現再說,自己也可以動手試一下。

接著我們再來看看乙個方法用synchronized同步**塊來執行,另乙個什麼也不加,我們是不是也可以得到期待的結果:他們非同步執行

package com.zqu.yqy.scdn.test.test003;

public class mymethod }}

public void testmethodb()

} }

結果是不是跟我們期待的一樣呢?答案是yes;

好了,關於synchronized的關鍵字的使用就介紹到這裡,其他的一些詳細的解釋我覺得最好的辦法就是閱讀官方的文件。

java併發程式設計之Exchanger

exchanger v 可以交換的物件型別 可以在對中對元素進行配對和交換的執行緒的同步點。每個執行緒將條目上的某個方法呈現給 exchange 方法,與夥伴執行緒進行匹配,並且在返回時接收其夥伴的物件。exchanger 可能被視為 synchronousqueue 的雙向形式。exchanger...

java併發程式設計之synchronized

上篇部落格沒寫好,排版改了好多次,看著實在頭疼所以就沒準備往下寫了,今天講下同步使用到的關鍵字synchronized,這個關鍵字可以是用在方法上,也可以使用再 塊上,synchronized作用在方法上,它的鎖物件是當前例項物件 public class syncthreadtest implem...

Java併發程式設計之CyclicBarrier

cyclicbarrier是乙個同步工具類,它允許一組執行緒互相等待,直到到達某個公共屏障點。與countdownlatch不同的是該barrier在釋放等待執行緒後可以重用,所以稱它為迴圈 cyclic 的屏障 barrier cyclicbarrier支援乙個可選的runnable命令,在一組執...