![Java多線程同步機(jī)制在售票系統(tǒng)的實(shí)現(xiàn)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/3/5ca2f334-3885-420e-a2ba-b9f838d1c867/5ca2f334-3885-420e-a2ba-b9f838d1c8671.gif)
![Java多線程同步機(jī)制在售票系統(tǒng)的實(shí)現(xiàn)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/3/5ca2f334-3885-420e-a2ba-b9f838d1c867/5ca2f334-3885-420e-a2ba-b9f838d1c8672.gif)
![Java多線程同步機(jī)制在售票系統(tǒng)的實(shí)現(xiàn)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/3/5ca2f334-3885-420e-a2ba-b9f838d1c867/5ca2f334-3885-420e-a2ba-b9f838d1c8673.gif)
![Java多線程同步機(jī)制在售票系統(tǒng)的實(shí)現(xiàn)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/3/5ca2f334-3885-420e-a2ba-b9f838d1c867/5ca2f334-3885-420e-a2ba-b9f838d1c8674.gif)
![Java多線程同步機(jī)制在售票系統(tǒng)的實(shí)現(xiàn)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/3/5ca2f334-3885-420e-a2ba-b9f838d1c867/5ca2f334-3885-420e-a2ba-b9f838d1c8675.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java多線程同步機(jī)制在售票系統(tǒng)的實(shí)現(xiàn)論文導(dǎo)讀:多線程技術(shù)的思想已經(jīng)使用了很長的一段時(shí)間。但其不支持相同優(yōu)先級(jí)的時(shí)間片輪換。多個(gè)用戶線程在并發(fā)運(yùn)行過程中可能同時(shí)訪問臨界區(qū)的內(nèi)容。在Java中定義了線程同步的概念。關(guān)鍵詞:多線程技術(shù),多線程優(yōu)先級(jí),時(shí)間片,同步,臨界區(qū)引言:多線程技術(shù)的思想已經(jīng)使用了很長的一段時(shí)間,它允許CPU處理器時(shí)間共享,即很多用戶可以共享處理器,每個(gè)用戶的任務(wù)都分配到一段處理器時(shí)間。多線程是現(xiàn)代操作系統(tǒng)有別于傳統(tǒng)操作系統(tǒng)的重要標(biāo)志之一,它有別于傳統(tǒng)的多進(jìn)程的概念。所謂線程就是程序中的一個(gè)執(zhí)行流,多線程程序是指一個(gè)程序中包含有多個(gè)執(zhí)行流,多線程是實(shí)現(xiàn)并發(fā)機(jī)制的一種有效手段。進(jìn)
2、程和線程一樣,都是實(shí)現(xiàn)并發(fā)性的一個(gè)基本單位。1基本概念:1.1線程與進(jìn)程的主要區(qū)別:同樣作為基本的執(zhí)行單元,線程的劃分比進(jìn)程小。多進(jìn)程每個(gè)占有獨(dú)立的內(nèi)存空間,而多線程共享同一內(nèi)存空間,通過共享的內(nèi)存空間來交換信息,切換效率遠(yuǎn)遠(yuǎn)高于多進(jìn)程。Java線程調(diào)度器支持不同優(yōu)先級(jí)線程的搶占方式,但其不支持相同優(yōu)先級(jí)的時(shí)間片輪換。Java運(yùn)行時(shí)系統(tǒng)所在的操作系統(tǒng)(例如:Windows XP)支持時(shí)間片的輪換,則線程調(diào)度器就支持相同優(yōu)先級(jí)線程的時(shí)間片輪換。免費(fèi)論文參考網(wǎng)。1.2Java多線程的特點(diǎn):1.2.1多線程的繼承由于Java引入了包的概念,從而使類的繼承更加簡便,線程的創(chuàng)建就是一個(gè)最好的例子。Jav
3、a多線程的實(shí)現(xiàn)有兩種辦法通過Thread繼承,在下面的研究中,我主要用繼承自Thread類來實(shí)現(xiàn)Java的多線程技術(shù)。通過Runnable接口。1.2.2Java多線程的同步技術(shù)Java應(yīng)用程序的多個(gè)線程共享同一進(jìn)程的數(shù)據(jù)資源,多個(gè)用戶線程在并發(fā)運(yùn)行過程中可能同時(shí)訪問臨界區(qū)的內(nèi)容,為了程序的正常運(yùn)行,在Java中定義了線程同步的概念,實(shí)現(xiàn)對(duì)臨界區(qū)共享資源的一致性的維護(hù)。1.3.3Java多線程的流程控制Java流程控制的方法有Sleep().Interrupt().Wait().Notif().Join()等。1.3.4臨界區(qū)在一個(gè)多線程的程序當(dāng)中,單獨(dú)的并發(fā)的線程訪問代碼段中的同一對(duì)象,則這
4、個(gè)代碼段叫做臨界區(qū),我們需要用同步的機(jī)制對(duì)代碼段進(jìn)行保護(hù),避免程序出現(xiàn)不確定的因素。1.3.5同步機(jī)制Java中支持線程的同步機(jī)制,它由synchronized方法實(shí)現(xiàn),分為同步塊和同步方法,在下面的討論中用synchronized的同步塊來解決問題。2.多線程同步機(jī)制在車票系統(tǒng)的實(shí)現(xiàn)2.1下面就以售票系統(tǒng)中所涉及的問題來討論Java的多線程同步機(jī)制問題,在售票系統(tǒng)中由于很大一部分時(shí)間可能有多人在購買車票,所以必須開辟多個(gè)線程同時(shí)為他們服務(wù),在這里我設(shè)有四個(gè)售票窗口,則開辟四個(gè)線程來為四個(gè)窗口服務(wù)模擬圖如下: 窗口1 窗口2窗口3 窗口4Thread1Thread2 Thread3Thread
5、4售票窗口模擬圖2.2出錯(cuò)的程序代碼如下:class TicketsSystempublic staticvoid main(String args)SellThread kt=new SellThread();new Thread(kt).start();new Thread(kt).start();new Thread(kt).start();new Thread(kt).start();class SellThreadextends Threadinttickets=60;public voidrun()while(true)if(tickets0)System.out.println(
6、Thread.currentThread().getName()+sellticket +tickets);tickets-;在上面的程序中為了簡單起見,我把一班車的車票數(shù)定為60張。這個(gè)系統(tǒng)在交付使用后的一段時(shí)間后,車站管理人員說系統(tǒng)出錯(cuò)了,當(dāng)票賣完了60張后,當(dāng)還有人來買票后,它有時(shí)還會(huì)打印出票來,當(dāng)然這種情況并不多見。我仔細(xì)研究后得知出錯(cuò)的主要原因是當(dāng)?shù)谝粋€(gè)售票窗口(Thread1)進(jìn)入if(tickets0)System.out.println(Thread.currentThread().getName()+ sellticket+tickets);Tickets-;代碼段后,它的時(shí)
7、間片到期,然后第二個(gè)售票窗口(Thread2)進(jìn)入if代碼段,它的時(shí)間片已到期。然后第三個(gè)窗口(Threas3)進(jìn)入if代碼段。免費(fèi)論文參考網(wǎng)。同理第四個(gè)窗口(Thread4)以一樣。當(dāng)然這種線程在進(jìn)入代碼段后時(shí)間片到期的現(xiàn)象并不多見,但作為車站長時(shí)間工作的售票系統(tǒng)來說,這種錯(cuò)誤就可能發(fā)生,而且一旦發(fā)生將帶來災(zāi)難性的后果。為了便于觀察到這個(gè)錯(cuò)誤,我調(diào)用了Thread類中的Sleep()方法,程序中的錯(cuò)誤就直觀的表現(xiàn)出來。免費(fèi)論文參考網(wǎng)。2.3直觀反映出錯(cuò)的程序如下:class TicketsSystempublic staticvoid main(String args)SellThread
8、kt=new SellThread();new Thread(kt).start();new Thread(kt).start();new Thread(kt).start();new Thread(kt).start();class SellThreadextends Threadinttickets=60;public voidrun()while(true)if(tickets0)tryThread.sleep(20);catch(Exception e)e.printStackTrace();System.out.println(Thread.currentThread().getNa
9、me()+sellticket +tickets);tickets-;運(yùn)行結(jié)果如下:Thread-1 sellticket 60Thread-1 sellticket 59.Thread-4 sellticket 1Thread-3 sellticket 0Thread-1 sellticket -1Thread-1 sellticket -2從上面的執(zhí)行結(jié)果就可以看出為什么系統(tǒng)中票已賣完還可以繼續(xù)賣幾張的原因,就是因?yàn)楫?dāng)系統(tǒng)中只有一張票的時(shí)候,第一個(gè)線程都進(jìn)入了if代碼段里面,它睡眠20毫秒,第二個(gè)線程進(jìn)入if代碼段里面,它已睡眠20毫秒。以此類推,第三,第四個(gè)線程if代碼段里面,從而導(dǎo)致了
10、系統(tǒng)繼續(xù)把0,-1,-2的票打印出來,這當(dāng)然不是我們想要的結(jié)果。下面我采用Java多線程同步機(jī)制中的同步塊技術(shù)來完善這個(gè)代碼段,問題得以解決。2.4修改后的程序代碼如下:classTicketsSystempublic staticvoid main(String args)SellThread kt=new SellThread();new Thread(kt).start();new Thread(kt).start();new Thread(kt).start();new Thread(kt).start();class SellThreadextends ThreadObject ob
11、j=new Object();inttickets=60;public voidrun()while(true)synchronized(obj)if(tickets0)tryThread.sleep(20);catch(Exception e)e.printStackTrace();System.out.println(Thread.currentThread().getName()+sellticket +tickets);tickets-;它的實(shí)現(xiàn)原理是當(dāng)有一個(gè)線程進(jìn)入同步塊之后,其它線程就沒有機(jī)會(huì)進(jìn)入同步塊程序,只能等到進(jìn)入同步塊的線程退出以后才能進(jìn)入同步塊程序,這樣就避免了系統(tǒng)在車票賣完了以后還能繼續(xù)賣票的問題。結(jié)束語:本文講述的關(guān)鍵問題是借助多線程的同步機(jī)制來解決長途汽車站售票系統(tǒng)中的售票系統(tǒng)的不穩(wěn)定的問題.我們借助多線程的同步機(jī)制解決了上述問題,使系統(tǒng)得以高效地運(yùn)行.參考文獻(xiàn):1.Java編程思想 Bruce Eckel 著 候捷 譯 機(jī)械工業(yè)出版社 20052.Java
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)民培訓(xùn)計(jì)劃與實(shí)施手冊(cè)
- 加工非標(biāo)制作合同范本
- 2025年度影視剪輯技術(shù)支持與咨詢服務(wù)合同
- 2025年度生物質(zhì)能發(fā)電項(xiàng)目投資與建設(shè)合同
- 公司資金借貸合同范例
- 供酒供銷合同范例
- 2025年度洗滌設(shè)備行業(yè)技術(shù)培訓(xùn)與咨詢服務(wù)合同
- 加工箍筋合同范本
- 買賣購房指標(biāo)合同范例
- 樂有假租房合同范本
- 元宇宙視域下非遺保護(hù)與傳播途徑探究
- 2025年買賣個(gè)人房屋合同(4篇)
- 2025代運(yùn)營合同范本
- 武漢2025年湖北武漢理工大學(xué)管理人員招聘筆試歷年參考題庫附帶答案詳解
- 第十一章《功和機(jī)械能》達(dá)標(biāo)測試卷(含答案)2024-2025學(xué)年度人教版物理八年級(jí)下冊(cè)
- 初三物理常識(shí)試卷單選題100道及答案
- 使用錯(cuò)誤評(píng)估報(bào)告(可用性工程)模版
- 高中英語新課程標(biāo)準(zhǔn)解讀課件
- 客服人員績效考核評(píng)分表
- 變壓器檢修風(fēng)險(xiǎn)分析及管控措施
評(píng)論
0/150
提交評(píng)論