第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

關(guān)于多線程的問題 麻煩各位大佬進(jìn)來看看 指導(dǎo)指導(dǎo) 十分感謝

關(guān)于多線程的問題 麻煩各位大佬進(jìn)來看看 指導(dǎo)指導(dǎo) 十分感謝

Dusdii 2019-05-16 11:19:12
問題:?Baozipu類和Chihuo類都創(chuàng)建了Baozi的對象為什么main方法還要傳個(gè)Baozi的對象參數(shù)進(jìn)去呢?這里有點(diǎn)不解?難道是因?yàn)殒i? package?cn.XianCheng; public?class?Baozipu?extends?Thread{ ????//創(chuàng)建一個(gè)包子類型的變量 ????????Baozi?bz?=?new?Baozi(); ????//使用帶參構(gòu)造方法為這個(gè)包子賦值 ????public?Baozipu(Baozi?cz){ ????????this.bz?=?cz?; ????} ????//設(shè)置線程任務(wù)生產(chǎn)包子 ????@Override ????public?void?run()?{ ????????????while(true){ ????//必須使用同步技術(shù)保證只有一個(gè)線程在執(zhí)行??這里用?同步代碼塊 ????????synchronized(bz){ ????????//判斷有沒有包子 ????????????if(bz.flag==true){ ?????????????//有包子包子鋪就進(jìn)入等待狀態(tài) ????????????????bz.notify(); ????????????????try?{ ????????????????????bz.wait(); ????????????????}?catch?(InterruptedException?e)?{ ????????????????????e.printStackTrace(); ????????????????} ????????????} ????????????if(bz.flag==false){ ????????????//沒有包子就生產(chǎn)包子 ???????????????bz.pi?=?"薄皮"; ???????????????bz.xian?=?"牛肉餡"; ????????????????System.out.println("正在生產(chǎn)包子"+Thread.currentThread().getName()); ????????????????try?{ ????????????????????Thread.sleep(1000); ????????????????}?catch?(InterruptedException?e)?{ ????????????????????e.printStackTrace(); ????????????????} ????????????????bz.flag?=?true; ????????????????System.out.println("包子鋪已經(jīng)生產(chǎn)好了:"+bz.pi+bz.xian+"包子"+Thread.currentThread().getName()); ????????????????bz.notify(); ????????????????try?{ ????????????????????Thread.sleep(1000); ????????????????}?catch?(InterruptedException?e)?{ ????????????????????e.printStackTrace(); ????????????????} ????????????} ????????} ???????} ????} }-------------------------------------------------------------------------------------------------------------package?cn.XianCheng; public?class?Chihuo?extends?Thread{ ????????Baozi?bz?=?new?Baozi(); ????????public?Chihuo(Baozi?cz){ ????????????this.bz?=?cz?; ????????} ????@Override ????public?void?run()?{ ????????while(true){ ????????????synchronized?(bz){ ????????????????if(bz.flag?==?false){ ????????????????????bz.notify(); ????????????????????try?{ ????????????????????????bz.wait(); ????????????????????}?catch?(InterruptedException?e)?{ ????????????????????????e.printStackTrace(); ????????????????????} ????????????????} ????????????????if(bz.flag?==?true){ ????????????????????System.out.println("正在吃:"+bz.pi+bz.xian+"包子"+Thread.currentThread().getName()); ????????????????????try?{ ????????????????????????Thread.sleep(1000); ????????????????????}?catch?(InterruptedException?e)?{ ????????????????????????e.printStackTrace(); ????????????????????} ????????????????????bz.flag?=?false?; ????????????????????System.out.println("吃完了"+Thread.currentThread().getName()); ????????????????????System.out.println("-------------------------------------"); ????????????????????bz.notify(); ????????????????????try?{ ????????????????????????Thread.sleep(1000); ????????????????????}?catch?(InterruptedException?e)?{ ????????????????????????e.printStackTrace(); ????????????????????} ????????????????} ????????????} ????????} ????} }--------------------------------------------------------------------------------------------------package?cn.XianCheng; public?class?Baozi?{ ????//皮 ????//餡 ????//包子的狀態(tài) ?????String?pi; ?????String?xian; ?????boolean?flag?=?false; }--------------------------------------------------------------------------------------------------package?cn.XianCheng; public?class?XianChengmain?{ ???? ????public?static?void?main(String[]?args)?{ ????????????Baozi?cz?=?new?Baozi();//創(chuàng)建包子對象 ????????????new?Baozipu(cz).start();//開啟包子鋪線程 ????????????new?Chihuo(cz).start();//開啟吃貨線程 ????} }
查看完整描述

3 回答

?
pardon110

TA貢獻(xiàn)1038條經(jīng)驗(yàn) 獲得超227個(gè)贊

多線程執(zhí)行(由線程調(diào)度器管理)是無序交替(無規(guī)律)。正常邏輯包子鋪生產(chǎn),吃貨類消費(fèi),它們所用的是同一批包子。你現(xiàn)在的代碼就好像,包子鋪,吃貨有各自的包子,但都只對第三方(主線程)運(yùn)過來(new)的包子感興趣。三個(gè)線程地位相等,然后搶著執(zhí)行(線程啟動(dòng)順序不代表執(zhí)行順序)。為確保成功消費(fèi)包子,需要明確各線程執(zhí)行體得到的結(jié)果有序,即生產(chǎn)(包子鋪)包子 -> 運(yùn)輸(主線程)->消費(fèi)(吃貨)。因此需要線程通信協(xié)調(diào),讓各線程執(zhí)行流有序,有了鎖解決資源共享能不能用的問題,有了同步解決數(shù)據(jù)一致性問題,三個(gè)線程的通信也依賴于那個(gè)主線程包子實(shí)例,實(shí)例notify與wait方法則告訴其它線程該對象鎖是否解除,當(dāng)前線程是否需要阻塞,來控制線程間執(zhí)行流。換而言之,如果你不傳包子對象,相當(dāng)于兩個(gè)子線程,各自玩自家的包子,與主線程包子無關(guān),那也沒必要用到鎖,用到同步,更不需要多線程了。

查看完整回答
反對 回復(fù) 2019-05-20
  • 3 回答
  • 0 關(guān)注
  • 909 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號