国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

19) Java并發

2019-11-14 22:06:33
字體:
來源:轉載
供稿:網友
19) java并發

>synchronizedsynchronized 關鍵字,它包括兩種用法:synchronized 方法和 synchronized 塊。?1>synchronized 方法:通過在方法聲明中加入 synchronized關鍵字來聲明 synchronized 方法。? ??? ? ?public synchronized void accessVal(int newVal);??????synchronized 方法控制對類成員變量的訪問:每個類實例對應一把鎖,每個 synchronized 方法都必須獲得調用該方法的類實例的鎖方能執行,否則所屬線程阻塞,方法一旦執行,就獨占該鎖,直到從該方法返回時才將鎖釋放,此后被阻塞的線程方能獲得該鎖,重新進入可執行狀態。這種機制確保了同一時刻對于每一個類實例,其所有聲明為 synchronized 的成員函數中至多只有一個處于可執行狀態(因為至多只有一個能夠獲得該類實例對應的鎖),從而有效避免了類成員變量的訪問沖突(只要所有可能訪問類成員變量的方法均被聲明為 synchronized)?????在 Java 中,不光是類實例,每一個類也對應一把鎖,這樣我們也可將類的靜態成員函數聲明為synchronized ,以控制其對類的靜態成員變量的訪問。synchronized 方法的缺陷:若將一個大的方法聲明為synchronized 將會大大影響效率,典型地,若將線程類的方法 run() 聲明為synchronized ,由于在線程的整個生命期內它一直在運行,因此將導致它對本類任何 synchronized 方法的調用都永遠不會成功。當然我們可以通過將訪問類成員變量的代碼放到專門的方法中,將其聲明為 synchronized ,并在主方法中調用來解決這一問題,但是 Java 為我們提供了更好的解決辦法,那就是 synchronized 塊。?2> synchronized 塊:通過 synchronized關鍵字來聲明synchronized 塊。語法如下:???????????? ? ?synchronized(syncObject) {?? ? ? ? ? ?//允許訪問控制的代碼?? ? ?}??????synchronized 塊是這樣一個代碼塊,其中的代碼必須獲得對象 syncObject (如前所述,可以是類實例或類)的鎖方能執行,具體機制同前所述。由于可以針對任意代碼塊,且可任意指定上鎖的對象,故靈活性較高。?對synchronized(this)的一些理解 :? ? ?一、當兩個并發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以后才能執行該代碼塊。?? ? ?二、然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。?? ? ?三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。
上一篇:Jar打包

下一篇:java 中的instanceof 運算符

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盖州市| 太仆寺旗| 河曲县| 塔河县| 汝州市| 芜湖县| 贵州省| 海晏县| 资阳市| 南昌县| 神池县| 安阳县| 芒康县| 昔阳县| 田林县| 巴楚县| 和平区| 澳门| 怀柔区| 永嘉县| 郧西县| 丹江口市| 隆安县| 顺昌县| 大同市| 汝城县| 固安县| 万年县| 西乌珠穆沁旗| 玉林市| 桓台县| 祁连县| 城固县| 肥乡县| 池州市| 辛集市| 福鼎市| 济南市| 郧西县| 兴义市| 延安市|