




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
課后作業(yè)一、填空題1.Runnable2.新生狀態(tài)、就緒狀態(tài)、阻塞狀態(tài)、就緒狀態(tài)3.OK4.D5.B6.B二、簡答題1.什么是多線程?多線程與多進(jìn)程的區(qū)別是什么?參考答案:多線程是指在一個(gè)程序中同時(shí)執(zhí)行多個(gè)任務(wù)的能力。這些任務(wù)在獨(dú)立的執(zhí)行流中運(yùn)行,并且可以并發(fā)地執(zhí)行。多進(jìn)程是指運(yùn)行多個(gè)程序?qū)嵗噙M(jìn)程能夠充分利用操作系統(tǒng)的多任務(wù)管理器,確保每個(gè)工作進(jìn)程始終處于最大工作效率狀態(tài)。而多線程是運(yùn)行在同一個(gè)進(jìn)程中,同一進(jìn)程中的所有線程可以訪問相同的全局變量和系統(tǒng)資源。怎樣解決線程的并發(fā)訪問問題?參考答案:①通過線程同步解決:使用synchronized關(guān)鍵字限制多個(gè)線程同時(shí)訪問共享資源的權(quán)限,避免多個(gè)線程同時(shí)修改同一份數(shù)據(jù)而導(dǎo)致數(shù)據(jù)不一致的問題。②通過線程通信解決:使用wait()和notify()方法來協(xié)調(diào)多個(gè)線程之間的操作。這可以確保在特定條件下,只有一個(gè)線程能夠訪問共享資源,從而避免數(shù)據(jù)競爭和死鎖等問題。線程有哪些狀態(tài)?它們之間是如何進(jìn)行轉(zhuǎn)換的?參考答案:線程的整個(gè)生命周期可以包含:新生狀態(tài)(New)、就緒狀態(tài)(Runnable)、運(yùn)行狀態(tài)(Running)、被阻塞狀態(tài)(Blocked)、死亡狀態(tài)(Dead)下五個(gè)狀態(tài)。什么是死鎖?如何防止死鎖出現(xiàn)?參考答案:死鎖是指兩個(gè)或兩個(gè)以上的線程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。當(dāng)下面四個(gè)條件同時(shí)滿足時(shí),就會(huì)發(fā)生死鎖。1)互斥使用,即當(dāng)資源被一個(gè)線程使用(占有)時(shí),別的線程不能使用。2)不可搶占,資源請求者不能強(qiáng)制從資源占有者手中奪取資源,資源只能由資源占用者主動(dòng)釋放。3)請求和保持,即當(dāng)資源的請求者在請求其他的資源的同時(shí)保持對原有資源的占有。4)循環(huán)等待,即存在一個(gè)等待隊(duì)列:P1占有P2的資源,P2占有P3的資源,P3占有P1的資源。這樣就形成了一個(gè)等待環(huán)路。防止死鎖的途徑就是不能讓滿足死鎖的條件同時(shí)發(fā)生。三、編程題1.建立兩個(gè)Thread的子類,一個(gè)在run()方法中調(diào)用wait(),另一個(gè)在run()方法休眠幾秒后對第一個(gè)線程調(diào)用notifyAll(),使第一個(gè)線程能輸出一條信息。參考代碼:publicclassTest{publicstaticvoidmain(String[]args){Objectlock=newObject();WaitThreadwaitThread=newWaitThread("WaitThread",lock);NotifyThreadnotifyThread=newNotifyThread("NotifyThread",lock);waitThread.start();notifyThread.start();}}publicclassNotifyThreadextendsThread{privateObjectlock;publicNotifyThread(Stringname,Objectlock){super(name);this.lock=lock;}@Overridepublicvoidrun(){try{Thread.sleep(3000);//休眠3秒synchronized(lock){lock.notifyAll();}}catch(InterruptedExceptione){e.printStackTrace();}}}publicclassWaitThreadextendsThread{privateObjectlock;publicWaitThread(Stringname,Objectlock){super(name);this.lock=lock;}@Overridepublicvoidrun(){try{synchronized(lock){lock.wait();System.out.println(Thread.currentThread().getName()+"接收到通知,結(jié)束");}}catch(InterruptedExceptione){e.printStackTrace();}}}修改任務(wù)6.2的需求,加入多個(gè)服務(wù)員,并能夠指明是誰得到了某個(gè)食物。注意在這個(gè)例子中必須使用notifyAll()方法,而不是notify()方法。參考代碼:publicclassRestaurant{ publicFoodfood;//聲明食物類 publicstaticvoidmain(String[]args){ Restaurantrestaurant=newRestaurant(); WaitPersonwaitPerson=newWaitPerson(restaurant,"服務(wù)員1"); WaitPersonwaitPerson2=newWaitPerson(restaurant,"服務(wù)員2"); Chefchef=newChef(restaurant); }}classFood{ privatestaticinti=0;//i用于生成累計(jì)計(jì)數(shù) privateintcount=++i;//count計(jì)數(shù) publicFood(){ if(count>6){//超出6份,則無法再繼續(xù) System.out.println("Outoffood,closing!"); System.exit(0); } } publicStringtoString(){ return"food"+count; }}classWaitPersonextendsThread{ privateRestaurantrestaurant; publicWaitPerson(Restaurantr,Stringname){ super(name); restaurant=r; start();//啟動(dòng)線程 } publicvoidrun(){ while(true){ while(restaurant.food==null){//如果廚師沒有準(zhǔn)備好食物 synchronized(restaurant){//進(jìn)入等待模式,直到被Chef的notify()方法喚醒 try{ restaurant.wait(); }catch(InterruptedExceptione){ e.printStackTrace(); } System.out.println(this.getName()+"Waitpersongot"+restaurant.food);//拿到廚師準(zhǔn)備好的食物 restaurant.food=null;//等待廚師準(zhǔn)備下個(gè)食物 } } } }}classChefextendsThread{ privateRestaurantrestaurant; privateWaitPersonwaitPerson; publicChef(Restaurantr){ restaurant=r; start();//啟動(dòng)線程 } publicvoidrun(){ while(true){ if(restaurant.food==null){//如果服務(wù)員需要食物 restaurant.food=newFood();//制作新食物 System.out.println("foodup!"); synchronized(restaurant){ restaurant.notifyAll();//喚醒服務(wù)員可以取食物 } } try{ sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } }}使用繼承Thread類的方法實(shí)現(xiàn)一個(gè)多線程程序,該程序先后啟動(dòng)三個(gè)線程。每個(gè)線程首先輸出一條創(chuàng)建信息,然后休眠一段時(shí)間,最后打印出結(jié)束信息并退出。publicclassTest{publicstaticvoidmain(String[]args){MyThreadthread1=newMyThread("Thread-1",1000);MyThreadthread2=newMyThread("Thread-2",2000);MyThreadthread3=newMyThread("Thread-3",3000);thread1.start();thread2.start();thread3.start();}}publicclassMyThreadextendsThread{privateStringthreadName;privateintsleepTime;publicMyThread(Stringname,intsleepTime){threadName=name;this.sleepTime=sleepTime;}@Overridepublicvoidrun(){System.out.println(threadName+"開始創(chuàng)建...");try{Thread.sleep(sleepTime);System.out.println(threadName+"創(chuàng)建完畢,準(zhǔn)備休眠...");Thread.sleep(sleepTime);System.out.println(threadName+"休眠結(jié)束,準(zhǔn)備退出...");}catch(InterruptedExceptione){e.printStackTrace();}}}4.用實(shí)現(xiàn)Runnable接口的方法實(shí)現(xiàn)上面的題目。參考代碼:publicclassTest{publicstaticvoidmain(String[]args){Threadthread1=newThread(newMyRunnable("Thread-1",1000));Threadthread2=newThread(newMyRunnable("Thread-2",2000));Threadthread3=newThread(newMyRunnable("Thread-3",3000));thread1.start();thread2.start();thread3.start();}}packagechapter6_4;publicclassMyRunnableimplementsRunnable{privateStringthreadName;privateintsleepTime;publicMyRunnable(Stringname,intsleepTime){threadName=name;this.sleepTime=sleepTime;}@Overridepublicvoidrun(){System.out.println(threadName+"開始創(chuàng)建...");try{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025黑龍江齊齊哈爾市富??h信訪局招聘公益性崗位人員2人模擬試卷附答案詳解(完整版)
- 企業(yè)員工考核與績效管理表
- 2025年極性微晶玻璃項(xiàng)目提案報(bào)告
- 景區(qū)承包經(jīng)營合同
- 山東省濟(jì)南市2024-2025學(xué)年高一上學(xué)期開學(xué)學(xué)情檢測地理地理試題(解析版)
- 江西省景德鎮(zhèn)市2024-2025學(xué)年高三下學(xué)期第三次質(zhì)檢地理試題(解析版)
- 2025年金湖縣事業(yè)單位公開招聘人員96人考前自測高頻考點(diǎn)模擬試題及參考答案詳解
- 2025年度吉林大學(xué)公開招聘教師(1號)(105人)模擬試卷及一套答案詳解
- 2025廣西玉林容縣公安局第一次公開招聘警務(wù)輔助人員23人模擬試卷及一套參考答案詳解
- 醫(yī)學(xué)研究領(lǐng)域責(zé)任承諾書(5篇)
- 2024年蚌埠五河縣事業(yè)單位選調(diào)工作人員考試真題
- 2025年醫(yī)院領(lǐng)導(dǎo)競聘面試題與參考答案
- 黑龍江省高等教育教學(xué)成果獎(jiǎng)申請書
- 2025中礦金石實(shí)業(yè)有限公司社會(huì)招聘備考考試題庫附答案解析
- 2025年屠檢考務(wù)試卷及答案
- (正式版)DB65∕T 4260-2019 《薰衣草優(yōu) 質(zhì)種苗組培快繁生產(chǎn)技術(shù)規(guī)程》
- 五金材料知識(shí)培訓(xùn)課件
- 冀北調(diào)度證考試題庫及答案
- 23《富貴不能淫》(公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì))統(tǒng)編版語文八年級上冊
- 校園科技教育主題班會(huì)活動(dòng)方案
- 綠色食品認(rèn)證合同協(xié)議
評論
0/150
提交評論