Java第十次作业--多线程
一、學(xué)習(xí)要點(diǎn)
認(rèn)真看書并查閱相關(guān)資料,掌握以下內(nèi)容:
- 理解進(jìn)程和線程的區(qū)別
- 掌握J(rèn)ava多線程的兩種實(shí)現(xiàn)方式和區(qū)別
- 理解線程對象的生命周期
- 熟悉線程控制的基本方法
- 掌握J(rèn)ava線程的同步機(jī)制
- 理解多線程通信
二、作業(yè)要求
發(fā)布一篇隨筆,主要包括以下幾部分的內(nèi)容:
(一)學(xué)習(xí)總結(jié)
1.用思維導(dǎo)圖對java多線程的學(xué)習(xí)內(nèi)容進(jìn)行總結(jié)。
參考資料: XMind。
2.下面是一個單線程實(shí)現(xiàn)的龜兔賽跑游戲。
public class TortoiseHareRace {public static void main(String[] args) {int totalStep = 10;int tortoiseStep = 0;int hareStep = 0;boolean[] flags = {true,false};System.out.println("龜兔賽跑開始了...");while(tortoiseStep < totalStep && hareStep < totalStep){tortoiseStep++;System.out.println("烏龜跑了"+tortoiseStep+"步...");boolean isHareSleep = flags[((int)(Math.random()*10))%2];if(isHareSleep){System.out.println("兔子睡著了zzzz");}else{hareStep += 2;System.out.println("兔子跑了"+hareStep+"步...");}} } }閱讀程序,采用實(shí)現(xiàn)Runnable接口的方式用多線程實(shí)現(xiàn)這個小游戲。下面給出主線程類,補(bǔ)充Tortoise線程類和Hare線程類。
public class TortoiseHareRace { public static void main(String[] args) {Tortoise tortoise = new Tortoise(10);Hare hare = new Hare(10);Thread tortoiseThread = new Thread(tortoise);Thread hareThread = new Thread(hare);tortoiseThread.start();hareThread.start();} }3.下面的程序是模擬了生產(chǎn)者——消費(fèi)者問題,生產(chǎn)者生產(chǎn)10個數(shù),消費(fèi)者依次消費(fèi)10個數(shù),運(yùn)行程序,看結(jié)果是否正常?存在什么問題?說明原因。使用synchronized, wait, notify解決程序出現(xiàn)的問題。寫出修改的部分程序即可。
class Consumer implements Runnable {private Clerk clerk;public Consumer(Clerk clerk) {this.clerk = clerk;}public void run() {System.out.println("消費(fèi)者開始消耗整數(shù)......");// 消耗10個整數(shù)for(int i = 1; i <= 10; i++) {try {// 等待隨機(jī)時間Thread.sleep((int) (Math.random() * 3000));}catch(InterruptedException e) {e.printStackTrace();} clerk.getProduct();// 從店員處取走整數(shù)}}} class Producer implements Runnable {private Clerk clerk;public Producer(Clerk clerk) {this.clerk = clerk;}public void run() {System.out.println( "生產(chǎn)者開始生產(chǎn)整數(shù)......");// 生產(chǎn)1到10的整數(shù)for(int product = 1; product <= 10; product++) {try {Thread.sleep((int) Math.random() * 3000);}catch(InterruptedException e) {e.printStackTrace();}clerk.setProduct(product); // 將產(chǎn)品交給店員}} } public class ProductTest {public static void main(String[] args) {Clerk clerk = new Clerk();Thread consumerThread = new Thread(new Consumer(clerk)); Thread producerThread = new Thread(new Producer(clerk)); consumerThread.start(); producerThread.start(); } } class Clerk {private int product = -1; // -1 表示目前沒有產(chǎn)品 // 這個方法由生產(chǎn)者呼叫public void setProduct(int product) {this.product = product; System.out.printf("生產(chǎn)者設(shè)定 (%d)%n", this.product); } // 這個方法由消費(fèi)者呼叫public int getProduct() { int p = this.product; System.out.printf("消費(fèi)者取走 (%d)%n", this.product); return p; } }4.其他需要總結(jié)的內(nèi)容。
(二)實(shí)驗(yàn)總結(jié)
實(shí)驗(yàn)內(nèi)容:
1.模擬三個老師同時分發(fā)80分作業(yè),每個老師相當(dāng)于一個線程。
2.模擬一個銀行存款的程序。假設(shè)有兩個儲戶都去銀行往同一個賬戶進(jìn)行存款,一次存100,每人存三次。要求儲戶每存一次錢,賬戶余額增加100,并在控制臺輸出當(dāng)前賬戶的余額。
完成實(shí)驗(yàn)內(nèi)容,代碼上傳到碼云,對完成實(shí)驗(yàn)內(nèi)容過程中遇到的問題、解決方案和思考等進(jìn)行歸納總結(jié),注意代碼中必須有必要的注釋。
格式如下:
程序設(shè)計(jì)思路:XXXXXXX
類圖結(jié)構(gòu):
問題1:XXXXXXX
原因:XXXXXXX
解決方案:XXXXXXX
問題2:XXXXXXX
原因:XXXXXXX
解決方案:XXXXXXX
(三)代碼托管(務(wù)必鏈接到你的項(xiàng)目)
- 碼云commit歷史截圖
上傳實(shí)驗(yàn)項(xiàng)目代碼到碼云,在碼云項(xiàng)目中選擇“統(tǒng)計(jì)-commits”,設(shè)置搜索時間段,搜索本周提交歷史,并截圖。
三、評分標(biāo)準(zhǔn)
- 作業(yè)總分10分,以0.5分為最小打分單位。
- 程序(4分)
- 格式不規(guī)范扣1分,程序有錯誤扣1-2分。 - 學(xué)習(xí)總結(jié)(4分)
- 內(nèi)容豐富,有自己的總結(jié)、思考和論述--3-4分
- 有自己的總結(jié)和論述--1-2分
- 大段文字復(fù)制,無自己的總結(jié)歸納--0分 - 實(shí)驗(yàn)總結(jié)(2分)
- 總結(jié)內(nèi)容豐富--2分
- 條理不清晰,應(yīng)付了事--0-1分 - 附加分:積極參與博客互評和互動,有實(shí)質(zhì)內(nèi)容加0.5-1分
- 沒有按時提交作業(yè),則本次作業(yè)為0分。
- 作業(yè)抄襲,倒扣10分。
隨筆必須采用MarkDown格式,可參考作業(yè)模板
轉(zhuǎn)載于:https://www.cnblogs.com/hebau-may/p/6909088.html
總結(jié)
以上是生活随笔為你收集整理的Java第十次作业--多线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 体验决定销量,真假4K争论仅仅是忽悠人而
- 下一篇: 学习css3中的动画