一、共享資源競(jìng)爭(zhēng)問題
在Java語言的并發(fā)編程中,由于我們不知道線程實(shí)際上在何時(shí)運(yùn)行,所以在實(shí)際多線程編程中,如果兩個(gè)線程訪問相同的資源,那么由于線程運(yùn)行的不確定性便會(huì)在這種多線程中產(chǎn)生訪問錯(cuò)誤。所以為了避免這一情況的發(fā)生,我們?cè)诰幊痰臅r(shí)候需要把并發(fā)執(zhí)行的線程中用于訪問這一共享資源的方法進(jìn)行同步處理,以避免并發(fā)對(duì)于共享資源產(chǎn)生的影響。
并發(fā)模式在解決線程沖突的問題時(shí),基本上都是采用序列化訪問共享資源的方案。這在我的理解中,就是我們要控制同一時(shí)刻只能讓一個(gè)線程對(duì)這一共享資源進(jìn)行訪問。
二、synchronized關(guān)鍵字的使用
1.synchronized對(duì)于類普通成員方法的修飾
Java語言中,每一個(gè)對(duì)象都含有單一的鎖(監(jiān)視器)。而synchronized的作用之一就是修飾使用了共享資源的成員方法,這樣在線程通過對(duì)象調(diào)用該方法時(shí),該對(duì)象都會(huì)被加鎖。這時(shí)候如果需要調(diào)用該對(duì)象的另一個(gè)synchronized方法,則需要在第一個(gè)方法調(diào)用完畢后再進(jìn)行,這就實(shí)現(xiàn)了最基本的同步。
例1:使用synchronized修飾方法和未修飾方法的區(qū)別
(1)使用synchronized修飾過的方法,在多線程執(zhí)行的過程中,程序依次輸出遞增3的數(shù)字
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26