




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2025/3/10零基礎快樂學Java新的問題模擬“龜兔賽跑”的過程。“龜兔賽跑”是一個耳熟能詳?shù)耐捁适拢适轮兄v述了一只堅持不懈的烏龜和一只驕傲自滿的兔子賽跑的過程。兔子覺得烏龜完全沒有勝算,所以決定在樹下睡一覺再起來比,沒想到一覺醒來卻發(fā)現(xiàn)已經晚了,最終烏龜贏得了勝利。1舉一反三第8章人盡其才,物盡其用——多線程龜兔賽跑2銀行取款銀行取款模擬多線程的同步多線程的等待喚醒機制銀行取款3舉一反三媽媽的愛十字路口的智能讓行體育場的角逐龜兔賽跑傳統(tǒng)的龜兔賽跑真實的賽場角逐多線程及其生命周期按照由簡到繁的原則,在項目完成的過程中可以先選擇文字或是簡單圖形來代替兔子和烏龜,待賽跑的整個過程模擬完成之后再完善兔子和烏龜?shù)男蜗螅每梢耘佬械臑觚敽涂梢员寂艿耐米觼硎沟谜麄€模擬過程更加美觀、逼真。與以往的動畫過程不同的是,這里的兩只小動物需要分別來控制它們的運動速度。一、龜兔賽跑1、傳統(tǒng)的龜兔賽跑2、真實的賽場角逐問題:
假如小烏龜?shù)膱猿植恍负统晒δ嬉u感動了森林里的其它小動物們,以至于大家都來報名參賽,眾多參賽隊員各自的運動狀態(tài)仍使用if條件語句來控制是否合適呢?另外,在“龜兔賽跑”的模擬過程中,比賽的結果是確定的,是人為控制的,而真正的賽場角逐具有公平性,比賽結果是不確定的,那么,這個比賽過程又如何模擬呢?一、龜兔賽跑將線程代碼融入龜兔賽跑程序新建:Threadrabbit=newThread(m,"兔子");可運行:rabbit.start();運行:publicvoidrun(){}阻塞:Thread.sleep(20);死亡:線程運行結束。線程和進程多線程的生命周期【例8-1】多線程的生命周期——小球下落3、多線程及其生命周期一、龜兔賽跑多線程的調度【例8-2】線程的優(yōu)先級【例8-3】未使用join()方法的實例【例8-4】使用join()方法后的實例進程是一個獨立運行的程序,如一個正在運行的記事本或瀏覽器。啟動兩次記事本則對應兩個進程,不同的進程有獨立的內存空間。線程是進程中可獨立執(zhí)行的子任務,一個進程可以包含一個或多個線程,但一個線程只能屬于一個進程。如做飯是一個進程,摘、洗、切、腌、煎、炒、燉、煮等不同的環(huán)節(jié)就是多個線程。線程是比進程更小的執(zhí)行單元,進程是不同的程序,而線程是同一程序中能夠共同運行的不同代碼段。1-進程與線程01單線程多線程排隊等候“同時”執(zhí)行啟動了一個JVM進程,JVM找到入口點main()主線程。JAVA本身是多線程的,如“守護線程”垃圾回收。多個線程共享進程的內存塊,線程間的通信容易,速度快(不同的進程因為處于不同的內存塊,通信相對困難)。主線程運行完成,JVM進程也隨即退出所有線程結束后JVM進程才退出2-線程及其執(zhí)行方式01最大限度的利用CPU資源讓程序獲得更高的性能多CPU并行單CPU輪轉并發(fā)1-多線程的生命周期021、新建狀態(tài)(New):新創(chuàng)建了一個線程對象。2、就緒狀態(tài)(Runnable):調用start()方法,線程位于可運行線程池中,等待獲取CPU的使用權。3、運行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行run()程序代碼。4、阻塞狀態(tài)(Blocked):線程因為某種原因放棄CPU使用權,暫時停止運行。阻塞的情況分等待阻塞(wait()方法,線程進入等待池)、同步阻塞(同步鎖)、其他阻塞(如:sleep()發(fā)出了I/O請求)。5、死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法,該線程結束生命周期。1-多線程的生命周期022-多線程的實現(xiàn)02實現(xiàn)接口繼承類必須實現(xiàn)run()可以不重寫run()不考慮類繼承關系必須考慮類繼承關系兩種實現(xiàn)方式的比較:實現(xiàn)方式:
實現(xiàn)Runnable接口或繼承Thread類。RunnableDemo&ThreadDemo問:線程兩種實現(xiàn)方式哪個更實用?問:創(chuàng)建線程對象,報start未定義錯誤。//start未定義錯誤classNoStart{ publicstaticvoidmain(Stringargs[]){ Tt=newT(); t.start(); }}classTimplementsRunnable{ publicvoidrun(){
}}本質區(qū)別:一個進程中多個線程的協(xié)同工作,多個線程各自獨立工作。如:ThreadAndRunnable.java2-多線程的實現(xiàn)02在Java程序中,JVM負責線程的調度,目的是為多個線程分配CPU的使用權。調度的模式有兩種:分時調度和搶占式調度。
分時調度:輪流獲取CPU使用權,平均分配占用CPU的時間;
搶占式調度:根據(jù)線程的優(yōu)先級別來獲取CPU的使用權。JVM的線程調度模式采用了搶占式調度模式。1-線程的調度03Thread分別用setPriority(intnewPriority)和getPriority()
來設置和獲取線程的優(yōu)先級。
Java線程的優(yōu)先級取值范圍是1~10,也可由Thread類的三個靜態(tài)常量來調整:
staticintMAX_PRIORITY//最高為10。staticintMIN_PRIORITY//最低為1。staticintNORM_PRIORITY//默認為5。
主線程的默認優(yōu)先級為Thread.NORM_PRIORITY。線程的優(yōu)先級有繼承關系。
相同優(yōu)先級遵循“先進先出”的原則。2-線程的優(yōu)先級03線程睡眠:Thread.sleep(longmillis)方法,時間結束轉為Runnable狀態(tài)。線程讓步:Thread.yield()方法,暫停當前正在執(zhí)行的線程對象,把執(zhí)行機會讓給相同或者更高優(yōu)先級的線程。線程加入:join()方法,在當前線程中調用另一個線程的join()方法,則當前線程轉入阻塞狀態(tài)。join(long)方法為調用線程在long時間后加入序列。線程中斷:interrupt()方法,只是給線程設置一個中斷狀態(tài),線程仍會繼續(xù)執(zhí)行。booleaninterrupted()用于測試當前線程是否已經中斷,線程中斷狀態(tài)由該方法清除。3-其它調度方法032龜兔賽跑舉一反三1銀行取款3銀行取款銀行取款模擬多線程的同步多線程的等待喚醒機制舉一反三媽媽的愛十字路口的智能讓行體育場的角逐龜兔賽跑傳統(tǒng)的龜兔賽跑真實的賽場角逐多線程及其生命周期第8章人盡其才,物盡其用——多線程一件事情沒有對錯之分、好壞之別,它就是很客觀的一件事,就像兔子的停停走走,很多人把它作為反面教材,從中感悟到了“人生的真諦在于堅持不懈”,不能一曝十寒,但也有的通過兔子的停停走走想到了愛與禮讓,實現(xiàn)了“有愛的媽媽”、“十字路口的智能讓行”、“禮讓斑馬線”、“文明乘車”等等。同樣的事情,不同的人感悟不同,這也正是多彩世界的奇妙之處,“萬物并育而不相害,道并行而不相悖”,千姿百態(tài),包羅萬象。下面分享一些創(chuàng)意作品的思路和關鍵代碼,誠邀您一起來參與,真正“沉浸式”地體味其中的快樂。二、舉一反三1、媽媽的愛二、舉一反三
天上下著雨,毛毛蟲媽媽帶著寶寶正急匆匆地往家趕。為了不讓寶寶淋雨,媽媽努力撐著一片大大的葉子,盡管自己的半個身子還在“傘”外,但她全然不顧,盡力遮擋著寶寶。寶寶奮力地向前爬著,但它太小了,總是趕不上媽媽。媽媽就爬一會兒停下來等等它,保證寶寶始終在媽媽的保護傘下。蟲媽媽的停停走走飽含著濃濃的愛意,有時候駐足是為了更好地并肩同行。
設計思路:毛毛蟲的身體由三個橢圓組合而成,通過中間橢圓的上下移動來達到身體起伏的效果,配合整個身體的向前移動即可以模擬毛毛蟲的蠕動過程。1、媽媽的愛二、舉一反三媽媽的爬行,用flag標志身體的上下蠕動,寶寶的爬行也類似。if(x5<60)flag=false;elseflag=true;if(flag==true){ x1+=m;//向前移動 x2+=n; x5-=t;//身體起伏}else{ x3+=m; x2+=n; x5+=t;}//媽媽等待寶寶的控制 if(x6-x1<10){ f=false; } if(x6-x1>100){ f=true; } if(f==true){ m=12; n=6; t=8; }else{//媽媽停下來等待 m=0; n=0; t=0; }2、十字路口的智能讓行二、舉一反三
運用多線程技術模擬了東西南北四個方向的車流,并在無信號燈控制的十字路口自動讓行,避免發(fā)生碰撞,有效地保證了交通安全及路面暢通。
設計思路:運用龜兔賽跑原理,將同向賽跑的兩個小動物更改為一個橫向運動,一個縱向運動,并把兔子睡覺的過程演變成車輛在十字路口的停車避讓過程,這樣就具備了智能交通的雛形,剩余的工作無非就是把單行道改為雙向車道,多加幾個if條件來判斷十字路口的避讓情況,同時加一些道路標識美化整個頁面就可以了。十字路口的智能讓行關鍵思路和代碼二、舉一反三思路一:利用縱橫兩個方向的交替控制達到十字路口車輛的避讓效果。利用縱向小車的位置來作為激活橫向小車行駛的條件,兩個方向的交替控制即可達到十字路口車輛的避讓效果。這種方法實現(xiàn)難度并不大,僅利用if語句即可完成,但缺點是代碼比較繁瑣,對小車的控制不夠完善,要模擬車流的川流不息比較困難。十字路口的智能讓行關鍵思路和代碼二、舉一反三思路二:不以路口作為研究對象,運用綜合邏輯判斷完成車輛避讓。if((a<730&&c>1080)||(a<730&&c<730)||(a>1080&&c>1080)){ n=(int)(Math.random()*5+1);//車輛行駛速度取1-6之間的隨機值 t=(int)(Math.random()*5+1);}//未有縱向車輛通過路口時,允許橫向向車輛通行if((b>750&&d>750)||(b<400&&d<400)||(b>750&&d<400)){ m=(int)(Math.random()*5+1); s=(int)(Math.random()*5+1);}其中m、n、s、t分別控制右方、上方、左方、下方來車的速度,a、b、c、d分別控制右方、上方、左方、下方車的橫坐標或縱坐標位置。該方法不僅代碼更為簡潔,而且判斷更為嚴謹,可以模擬川流不息的車流。同時車流運用了隨機值來控制車速,使得模擬效果更為真實。十字路口的智能讓行關鍵思路和代碼二、舉一反三思路三:將每輛小車視作對象,運用面向對象程序設計思想完成項目。classCar{//小車類intx;//小車坐標 inty; Car(intx,inty){ this.x=x; this.y=y; }}創(chuàng)建小車類和十字路口類,給出小車的位置和十字路口的狀態(tài)。classCross{//十字路口類intcountX,countY;//記錄橫縱向小車是否進入路口的變量Cross(){ this.countX=0; this.countY=0;}//路口狀況booleanSituation(){ if(this.countX!=0&&this.countY!=0){ returnfalse;//橫縱向小車同時出現(xiàn)在十字路口 }elsereturntrue;//其它情況}}3、體育場的角逐二、舉一反三模擬多名參賽選手在白色跑道上奮力拼搏的過程,比賽結果具有隨機性。//對多個線程的創(chuàng)建和啟動Thread[]player=newThread[6];for(inti=0;i<6;i++){ player[i]=newThread(m); player[i].start();}//每個參賽隊員的位置坐標(x,y)int[]x=newint[6];int[]y=newint[6];龜兔賽跑1舉一反三23銀行取款銀行取款銀行取款模擬多線程的同步多線程的等待喚醒機制舉一反三媽媽的愛十字路口的智能讓行體育場的角逐龜兔賽跑傳統(tǒng)的龜兔賽跑真實的賽場角逐多線程及其生命周期第8章人盡其才,物盡其用——多線程三、銀行取款1、銀行取款模擬
假設銀行目前有100萬元現(xiàn)金,兩位顧客同時在不同的窗口辦理取款業(yè)務,每人取款20萬元。為了保證安全,銀行要求單筆取款金額不能超過5萬元,要取到20萬需要分四筆業(yè)務辦理。同時,為了提升服務效率,銀行在辦理業(yè)務時不會等一個窗口辦理完畢后再開啟下一個窗口,而是不同窗口同時進行。這就需要銀行系統(tǒng)有統(tǒng)籌協(xié)調的能力,不僅要保證每個窗口服務時間基本均衡,而且還要隨時保證所取金額和剩余金額的正確性,因此我們選用多線程對整個取款過程進行模擬。在Java中對資源加鎖的處理方法非常簡單,使用synchronized關鍵字修飾相應方法或代碼塊即可。如前面取款方法take():publicsynchronizedstaticvoidtake(intk){//取款
……}也可以寫成如下形式:publicstaticvoidtake(intk){//取款
synchronized(this){……}}三、銀行取款2、多線程的同步【例8-5】線程的同步控制三、銀行取款3、多線程的等待喚醒機制線程通信
當多個線程共同完成一件任務,而每個線程的子任務又不同時,需要線程之間的相互協(xié)作和通信,以確保任務的順利完成,同時又能高效地利用資源。比如對于產品而言,一個線程負責生產,另一個線程負責消費,在產品未生產出來之前無法消費,相反,產品出現(xiàn)積壓則需要暫停生產,那么兩線程之間就需要保持密切的聯(lián)系,這就是線程的通信。在Java中處理線程通信的機制稱為等待喚醒機制。等待喚醒機制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCS 051-2023露天礦山自卸車無人駕駛系統(tǒng)總體要求
- T/CCS 028-2023基于地理信息系統(tǒng)的工作面截割模板自動生成系統(tǒng)技術要求
- T/CCMA 0115-2021塔式起重機使用說明書編寫導則
- T/CCMA 0090-2020綠色設計產品評價技術規(guī)范混凝土泵車
- T/CAQI 69-2019管道直飲水系統(tǒng)技術要求
- T/CAPEC 1-2018電站鍋爐制造監(jiān)理技術要求
- T/CAPE 13003-2024民用建筑裝配式通風系統(tǒng)工程技術規(guī)程
- T/CAME 61-2023通倉交融手術室建設指南
- 大運會保安考試題及答案
- 檢驗招考試題及答案
- 山西建投考試題
- 初中生物大單元教學設計與課堂實施的策略與技巧
- 電機故障機理分析
- 建筑工程質量管理培訓
- 合伙開家小型賓館協(xié)議書范文最簡單
- 學生西服使用購買問卷調查
- 摩托艇相關項目實施方案
- 朗讀藝術入門學習通超星期末考試答案章節(jié)答案2024年
- “雙減”背景下高中語文作業(yè)設計的優(yōu)化實踐與研究
- 《社區(qū)治理》 課件 第四章 社區(qū)治理模式
- 2024年同等學力申碩英語真題及答案
評論
0/150
提交評論