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)使用重入鎖實現線程同步。可重入的互斥鎖具有與使用同步方法和語句所訪問的隱式監視器鎖相同的一些基本行為和語義,但功能更強大。它由最近成功獲得鎖,并且還沒有釋放該鎖的線程擁有。

(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级毛片免费网站| 91亚瑟视频| 国产成人精品午夜视频'| 亚洲国产一区在线观看| 91久久天天躁狠狠躁夜夜| 久久精品人人做人人| 国产精品视屏| 91日本在线观看亚洲精品| 91精品啪在线观看国产60岁 | 777午夜精品电影免费看| 69国产精品视频免费| 思思热在线视频精品| av无码久久精品| 67194在线午夜亚洲| 午夜毛片福利| 91精品国产综合久久香蕉922| 高清不卡一区二区三区香蕉| 女人18毛片一级毛片在线| 欧美一道本| 亚洲人成高清| 黄色福利在线| 制服丝袜 91视频| 91精品国产自产在线老师啪l| 午夜无码一区二区三区在线app| 国产精品一区二区久久精品无码| 免费观看欧美性一级| 国产欧美专区在线观看| 亚州AV秘 一区二区三区| 日本在线欧美在线| 日韩成人在线网站| 国产成+人+综合+亚洲欧美| 国产成人精品男人的天堂| 深夜福利视频一区二区| 国产午夜无码片在线观看网站| 婷婷激情五月网| 综合成人国产| 国产呦精品一区二区三区下载 | 99热这里只有成人精品国产| 国产亚洲精品97在线观看 | 99re视频在线| 国产欧美日韩资源在线观看| 精品人妻无码中字系列| 亚洲狠狠婷婷综合久久久久| 91国语视频| 国产亚洲欧美另类一区二区| 97久久精品人人| 日韩高清成人| 亚洲一区毛片| 女人毛片a级大学毛片免费| 亚洲日本www| 十八禁美女裸体网站| 欧美日本视频在线观看| 久久婷婷六月| 午夜老司机永久免费看片| 久久香蕉欧美精品| 日韩欧美国产三级| 欧美综合激情| 激情综合图区| 国产日韩欧美精品区性色| 麻豆AV网站免费进入| a天堂视频| 日韩欧美国产另类| 久久人体视频| 任我操在线视频| 国产精品视频白浆免费视频| 欧美精品二区| 婷婷99视频精品全部在线观看| 天堂在线www网亚洲| 日韩美毛片| 日本午夜三级| 亚洲欧美日韩成人在线| 无套av在线| 国模极品一区二区三区| 亚洲色图在线观看| 色亚洲成人| 亚洲国产综合自在线另类| 国产麻豆另类AV| 精品在线免费播放|