999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

同步機制實現多線程有序訪問資源

2015-07-27 07:38:34江西信息應用職業技術學院計算機技術系南昌330043
山東工業技術 2015年19期
關鍵詞:同步資源

薛 嵐(江西信息應用職業技術學院 計算機技術系,南昌 330043)

同步機制實現多線程有序訪問資源

薛嵐
(江西信息應用職業技術學院計算機技術系,南昌330043)

摘要:當多個線程競爭訪問同一個資源時,Java提供了線程同步這種機制來協調各個線程的訪問。由于線程同步的復雜性,很多時候開發人員弄不清楚資源是什么、線程何時處于競爭狀態,線程同步如何使用等問題,本文將對線程同步問題做深入探討。

關鍵詞:線程;同步;資源;鎖

1 什么是線程同步

多線程是指在同一個程序中同時存在幾個執行體,按幾條不同的執行路徑共同工作的情況。Java允許多線程并發控制,當多個線程訪問同一資源時,也就是多個線程同時競爭一個資源同時操作一個可共享的資源變量時(如數據的增刪改查),將會導致數據不準確,相互之間產生沖突,如果協調不好就會出現數據不一致的問題。因此當多個線程訪問同一資源時,因此加入同步鎖讓某一個線程獨占此資源,也就是鎖定該資源,其它線程在此時此刻不能訪問該資源,以避免在該線程沒有完成操作之前,被其他線程的調用,稱為線程同步。從而保證了該變量的唯一性和準確性。

2 線程同步代碼表示

在Java代碼中運用線程同步機制,有兩個關鍵處的代碼需要完成:1、當多個線程競爭訪問同一個對象或同一變量時,該對象或變量為競爭資源標識為private;2、當某一個方法或某一段代碼在某一個時刻只能被一個線程獨自訪問,用synchronized關鍵字標識方法或代碼為同步。synchronized只能標記非抽象的方法,不能標識成員變量。

3 同步方式

(1)synchronized方法。用synchronized關鍵字修飾一個方法,該方法為同步方法。Java中的每個對象資源都有一個鎖,或者叫做監視器,當一個線程訪問某個對象的同步方法時,該對象被鎖住,其他任何線程無法去訪問該對象的同步方法了,相當于對象被一個線程獨占。直到該線程線程執行方法完畢后(或者是拋出了異常),才將該對象解鎖,釋放對象資源,其他線程才有可能再去訪問該對象的同步方法。

用同步方法實現類成員變量的訪問:Java系統為每個類實例都配了一把鎖,當要用類實例來調用同步方法時需要獲得這個類實例的鎖才能執行,此時進入線程運行狀態,否則就為線程阻塞。

同步方法一旦被執行執行,其它類實例將無法訪問,直到同步方法返回釋放鎖,其它類實例才有可能訪問此方法。被阻塞的其它線程才能獲得該鎖,重新進入可執行狀態。這種機制保證了類中所有同步成員方法在同一時刻只有一個可被類實例訪問,因為只有獲得了類實例對應的鎖的同步成員方法才能被訪問,從而有效避免了類成員方法的訪問矛盾。在Java中,除了類實例以外,每一個類也對應一把鎖,因此也可將類的靜態成員方法聲明為同步,以避免對類的靜態成員的訪問沖突。

同步方法的缺點:有些方法若聲明為同步將會很大程度地降低執行效率,線程類的run()方法不能聲明為同步,否則它對本類中的任何同步方法的調用都不會成功。同步機制需要占用大量內存,而且如果使用不當易造成死鎖。

(2)synchronized塊。將需要被線程獨占訪問的代碼用大括號括起來前面標識為synchronized,則系統自動為該段語句塊加上內置鎖,從而構成同步代碼塊。

同步代碼塊中的代碼必須獲得類對象或類的鎖才能被線程訪問執行。由于任何代碼塊都可以標識為同步,并且可獲得任意對象上的鎖,所以同步代碼塊運用方便靈活。

(3)使用特殊域變量實現線程同步。1).volatile關鍵字為域變量的訪問提供了一種免鎖機制;2).使用volatile修飾域相當于告訴虛擬機該域可能會被其他線程更新;3).因此每次使用該域就要重新計算,而不是使用寄存器中的值;4).volatile不會提供任何原子操作,它也不能用來修飾final類型的變量

(4)使用重入鎖實現線程同步??芍厝氲幕コ怄i具有與使用同步方法和語句所訪問的隱式監視器鎖相同的一些基本行為和語義,但功能更強大。它由最近成功獲得鎖,并且還沒有釋放該鎖的線程擁有。

(5)使用局部變量實現線程同步

4 同步的特點

(1)無論方法還是代碼標識為同步,鎖住的資源是指對象,而且只要不是多個線程同時訪問同步方法和代碼塊,其還可以被其他線程的對象訪問,。

(2)每個對象只對應一個鎖,即一個對象只與一個鎖相關聯。

(3)使用同步機制時需要謹慎,能不用同步實現的操作就不用同步實現。因為使用同步需要占用很大的系統內存,開銷很大就有可能造成死鎖。

(4)當兩個線程同時搶占同一個對象中的同步方法或變量時,只能有一個線程可以執行訪問同步方法或變量。另一個線程進入暫時等待狀態必須等待當前線程執行完才能訪問。

(5)當一個線程訪問對象中的一個同步代碼塊時,這個對象中的其它同步代碼塊也會被鎖住,也就是對其它線程關閉。

(6)當一個線程訪問對象的一個同步代碼塊時,該對象中的非同步方法或變量不受影響,可以被其它線程訪問。

(7)當一個線程訪問一個對象的某個同步代碼塊時,該對象的對象鎖就自動賦給了此線程。即此線程獨占該對象的所有同步方法和變量,禁止同一時刻其它線程對該對象上任何同步方法和變量的訪問。

5 線程同步小結

(1)線程同步機制是為了防止多個線程競爭同一資源時由于沒協調好而出現線程對資源數據修改的不一致。

(2)線程同步機制需要通過鎖來實現,每個對象都有一把鎖。當一個線程獲得了一個對象上的鎖,其它線程在同一時刻就不能訪問該對象上的所有同步方法和同步變量

(3)對于靜態同步方法,鎖是針對這個類的,鎖對象是該類的Class對象。靜態和非靜態方法的鎖互不干預。一個線程獲得鎖,在一個同步方法中訪問另一個對象上的同步方法時,會獲取這兩個對象鎖。

(4)使用同步時,要注意在是哪個對象上同步,否則會出現對象不一致。

(5)當多個線程競爭一個資源時,只有獲得對象鎖的線程才能訪問資源,沒有獲取對象鎖的線程將處于暫時阻塞狀態。

(6)死鎖是多個線程需要獲得其它線程占有的資源后才能完成操作,而每個線程又都不肯釋放自己占有的資源,造成永遠相互等待。

參考文獻:

[1]張榮海.Java多線程同步方法的研究[J].黑龍江科技信息,2003 (05).

作者簡介:薛嵐(1980-),女,江西南昌人,碩士,講師,研究方向:軟件技術專業Java方向。

猜你喜歡
同步資源
讓有限的“資源”更有效
基礎教育資源展示
一樣的資源,不一樣的收獲
資源回收
資源再生 歡迎訂閱
資源再生(2017年3期)2017-06-01 12:20:59
素質教育理念下藝術教育改革的思路
政府職能的轉變與中國經濟結構調整的同步
商情(2016年42期)2016-12-23 14:26:58
公共藝術與城市設計的協調與同步
有源應答器DBPL解碼算法研究及FPGA實現
一種新型雙軌同步焊接的焊接裝置
主站蜘蛛池模板: 久久精品无码专区免费| 激情无码视频在线看| 日本AⅤ精品一区二区三区日| 五月天久久综合国产一区二区| 无码精品国产dvd在线观看9久 | 草逼视频国产| 亚洲侵犯无码网址在线观看| 亚洲午夜福利精品无码不卡 | 操美女免费网站| 波多野结衣AV无码久久一区| 亚洲色无码专线精品观看| 国产欧美日本在线观看| 人妻无码AⅤ中文字| 久久久久国产精品熟女影院| 国产在线高清一级毛片| 国产麻豆va精品视频| 99爱在线| 国产拍揄自揄精品视频网站| 欧美日本不卡| 中文国产成人精品久久| 国产综合另类小说色区色噜噜| 国产亚洲精品无码专| 久久久久无码精品| 亚洲无码高清视频在线观看| 精品免费在线视频| 国产欧美日韩免费| 人禽伦免费交视频网页播放| 亚洲一本大道在线| 亚洲天堂区| 成人免费午夜视频| 伊人精品视频免费在线| 香蕉在线视频网站| 老司机午夜精品视频你懂的| 欧美精品亚洲二区| 精品国产香蕉在线播出| 国产白浆在线| 亚洲成人一区二区三区| 精品人妻系列无码专区久久| 免费国产高清视频| 亚洲精品麻豆| 四虎精品黑人视频| 欧美日本二区| 亚洲自偷自拍另类小说| 制服丝袜 91视频| 亚洲精品无码AⅤ片青青在线观看| 亚洲精品自在线拍| 五月婷婷伊人网| 一本大道香蕉久中文在线播放| 国产毛片不卡| 92午夜福利影院一区二区三区| 欧美亚洲中文精品三区| 久久精品女人天堂aaa| 国产69精品久久| 精品国产黑色丝袜高跟鞋| 欧美精品在线观看视频| 日韩欧美国产综合| 亚洲天堂网视频| 久久伊人色| 欧美黑人欧美精品刺激| 中文字幕在线视频免费| 伊人久久久久久久| 国产麻豆福利av在线播放| 国内精品91| 美女被躁出白浆视频播放| 在线观看视频99| 国产精品女在线观看| 色天天综合| 欧美精品成人一区二区在线观看| 永久在线精品免费视频观看| 日韩欧美国产三级| 亚洲精品制服丝袜二区| 日韩在线中文| 大陆精大陆国产国语精品1024| 国产成人久视频免费| 日韩第九页| 久久永久免费人妻精品| 亚洲91精品视频| 国产精品毛片一区视频播| 日本黄色a视频| 婷婷色狠狠干| 日韩在线视频网站| 国产网站一区二区三区|