認真看書並查閱相關資料,掌握如下內容:html
- 理解進程和線程的區別
- 掌握Java多線程的兩種實現方式和區別
- 理解線程對象的生命週期
- 熟悉線程控制的基本方法
- 掌握Java線程的同步機制
- 理解多線程通訊
發佈一篇隨筆,主要包括如下幾部分的內容:java
1.用思惟導圖對java多線程的學習內容進行總結。多線程
參考資料: XMind。dom
2.下面是一個單線程實現的龜兔賽跑遊戲。學習
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+"步..."); } } } }
閱讀程序,採用實現Runnable接口的方式用多線程實現這個小遊戲。下面給出主線程類,補充Tortoise線程類和Hare線程類。this
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.下面的程序是模擬了生產者——消費者問題,生產者生產10個數,消費者依次消費10個數,運行程序,看結果是否正常?存在什麼問題?說明緣由。使用synchronized, wait, notify
解決程序出現的問題。寫出修改的部分程序便可。.net
class Consumer implements Runnable { private Clerk clerk; public Consumer(Clerk clerk) { this.clerk = clerk; } public void run() { System.out.println("消費者開始消耗整數......"); // 消耗10個整數 for(int i = 1; i <= 10; i++) { try { // 等待隨機時間 Thread.sleep((int) (Math.random() * 3000)); } catch(InterruptedException e) { e.printStackTrace(); } clerk.getProduct();// 從店員處取走整數 } } } class Producer implements Runnable { private Clerk clerk; public Producer(Clerk clerk) { this.clerk = clerk; } public void run() { System.out.println( "生產者開始生產整數......"); // 生產1到10的整數 for(int product = 1; product <= 10; product++) { try { Thread.sleep((int) Math.random() * 3000); } catch(InterruptedException e) { e.printStackTrace(); } clerk.setProduct(product); // 將產品交給店員 } } } 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 表示目前沒有產品 // 這個方法由生產者呼叫 public void setProduct(int product) { this.product = product; System.out.printf("生產者設定 (%d)%n", this.product); } // 這個方法由消費者呼叫 public int getProduct() { int p = this.product; System.out.printf("消費者取走 (%d)%n", this.product); return p; } }
4.其餘須要總結的內容。線程
實驗內容:
1.模擬三個老師同時分發80分做業,每一個老師至關於一個線程。
2.模擬一個銀行存款的程序。假設有兩個儲戶都去銀行往同一個帳戶進行存款,一次存100,每人存三次。要求儲戶每存一次錢,帳戶餘額增長100,並在控制檯輸出當前帳戶的餘額。
完成實驗內容,代碼上傳到碼雲,對完成實驗內容過程當中遇到的問題、解決方案和思考等進行概括總結,注意代碼中必須有必要的註釋。
格式以下:
程序設計思路:XXXXXXX
類圖結構:
問題1:XXXXXXX
緣由:XXXXXXX
解決方案:XXXXXXX
問題2:XXXXXXX
緣由:XXXXXXX
解決方案:XXXXXXX設計
- 做業總分10分,以0.5分爲最小打分單位。
- 程序(4分)
- 格式不規範扣1分,程序有錯誤扣1-2分。- 學習總結(4分)
- 內容豐富,有本身的總結、思考和論述--3-4分
- 有本身的總結和論述--1-2分
- 大段文字複製,無本身的總結概括--0分- 實驗總結(2分)
- 總結內容豐富--2分
- 條理不清晰,應付了事--0-1分- 附加分:積極參與博客互評和互動,有實質內容加0.5-1分
- 沒有按時提交做業,則本次做業爲0分。
- 做業抄襲,倒扣10分。
隨筆必須採用MarkDown格式,可參考做業模板code