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實現
一種新型雙軌同步焊接的焊接裝置
主站蜘蛛池模板: 久久久久免费看成人影片| 久久精品娱乐亚洲领先| 国产欧美日韩另类| 97色婷婷成人综合在线观看| 国产精品亚洲专区一区| 国产不卡在线看| 天天综合网在线| 国产www网站| 小13箩利洗澡无码视频免费网站| 91啦中文字幕| 欧美成a人片在线观看| 日本午夜影院| 国产在线精品网址你懂的| 园内精品自拍视频在线播放| 国产精品专区第1页| 欧美三级视频网站| h网站在线播放| 国产亚洲欧美日韩在线一区二区三区| 日韩精品一区二区深田咏美| 亚洲,国产,日韩,综合一区| 国产精品太粉嫩高中在线观看| 国产日韩欧美成人| 91亚洲精品国产自在现线| 青青草国产一区二区三区| 国产精品永久久久久| 日本久久久久久免费网络| 日本亚洲欧美在线| 国模私拍一区二区| 亚洲看片网| 免费女人18毛片a级毛片视频| 最新国语自产精品视频在| 国产精鲁鲁网在线视频| 超清无码熟妇人妻AV在线绿巨人| 久久人搡人人玩人妻精品 | 91久久偷偷做嫩草影院| 日韩精品久久久久久久电影蜜臀| 免费国产一级 片内射老| 欧美天堂久久| 久久99国产乱子伦精品免| 九九九精品成人免费视频7| 亚洲国产精品成人久久综合影院| 欧美日韩国产精品va| 国产精品99久久久久久董美香| a天堂视频在线| 国产高潮流白浆视频| 欧美日韩另类国产| 免费毛片全部不收费的| 97视频在线精品国自产拍| 99精品视频播放| 无码免费试看| 久久永久免费人妻精品| 亚洲欧美日韩高清综合678| 91九色视频网| 国产精品va免费视频| 波多野结衣亚洲一区| 有专无码视频| 亚洲国产日韩欧美在线| 蝌蚪国产精品视频第一页| 99久久国产综合精品女同| 国产黑丝视频在线观看| 精品国产成人三级在线观看| 亚洲无码日韩一区| 免费欧美一级| 亚洲免费三区| 色老头综合网| 欧美日韩久久综合| AV老司机AV天堂| 中文字幕伦视频| 人妻中文字幕无码久久一区| 97久久精品人人| 亚洲第一区精品日韩在线播放| 一级毛片免费观看不卡视频| 免费全部高H视频无码无遮掩| 欧美午夜在线观看| 日本人妻丰满熟妇区| 国产乱人激情H在线观看| 女人av社区男人的天堂| 99视频在线免费| 国产精品露脸视频| 国产成人乱无码视频| 91在线播放免费不卡无毒| 亚洲色图综合在线|