201621123021《JAVA程序設計》第十一周學習總結
阿新 • • 發佈:2017-12-02
lru 實現類 java程序 run pro 線程休眠 ges 結束 修飾
1. 本周學習總結
2. 書面作業
1. 源代碼閱讀:多線程程序BounceThread
1.1 BallRunnable類有什麽用?為什麽代碼中需要調用Thread.sleep進行休眠?
- BallRunable是為了實現Runable接口,為啟動線程做準備。
- Thread.sleep休眠時是為了讓我們查看球運動的過程,給我們視覺停頓,然我們能夠看到球在運動。
1.2 Ball.java只做了兩件事,這兩件事分別是什麽?BallComponent對象是幹什麽的?其內部的ArrayList有什麽用?程序運行過程中,生成了幾個BallComponent對象?該程序使用了多線程技術,每個小球是分別在不同的線程中進行繪制嗎?
- Ball.java實現球的大小和形狀這兩件事。
- BallComponent對象視為了制作球的圖形。
- 生成了Ball b : balls個對象。
- 不是,小球在同一個線程中繪制,不過線程運用和Thread.sleep函數,使線程休眠,小球能夠不停的繪制。
2. 實驗總結:題集(多線程)
2.1 題目:Thread、PrintTask、Runnable與匿名內部類。並回答:
a)通過定義Runnable接口的實現類來實現多線程程序比通過繼承自Thread類實現多線程程序有何好處?
- 能夠避免重復創建Thread對象。
b) 6-1,6-3,6-11實驗總結。
- 6-1本實驗使用Thread函數的getname以及isAlive語法完成了本題。
- 6-3本實驗使用匿名內部類完成了Runable函數,完成本題。
- 6-11本實驗我是通過繼承Thread完成run函數,完成本題。
2.2 使用Lambda表達式改寫6-3
2.3 題目:6-2(Runnable與停止線程)。回答:需要怎樣才能正確地停止一個運行中的線程?
- 本題所運用的方法是循環來讓線程持續運行,在碰到“alien”時跳出循環,run函數跳出循環,本題中函數跳出循環後,函數輸出"stop",然後進程結束。
3. 互斥訪問
3.1 修改TestUnSynchronizedThread.java源代碼使其可以同步訪問。(關鍵代碼截圖,需出現學號)
4. 互斥訪問與同步訪問
4.1 除了使用synchronized修飾方法實現互斥同步訪問,還有什麽辦法可以使用synchronized實現互斥同步訪問,使用代碼說明(請出現相關代碼及學號)?
- 可以通過同步代碼塊進行互斥同步訪問
4.2 同步代碼塊與同步方法有何區別?
- 兩者之間作用範圍不一樣,同步方法對對象進行加鎖,而同步代碼塊是對其方法進行加鎖。
4.3 實現互斥訪問的原理是什麽?請使用對象鎖概念並結合相應的代碼塊進行說明。當程序執行synchronized同步代碼塊或者同步方法時,線程的狀態是怎麽變化的?
- 原理:某一個線程要對某一個資源進行處理時,系統分配給改線程一把鎖,鎖住這一塊資源,而只有該線程持有對該資源鎖處理的鑰匙。
- 如PTA6-4我們便是對balance該資源要處理時,進行該處理,當程序執行synchronized同步代碼塊,系統就會分配鎖,只讓該線程進行處理。
4.4 Java多線程中使用什麽關鍵字實現線程之間的通信,進而實現線程的協同工作?
- 使用synchronized、wait/notify等關鍵字,進行線程的協同工作。
5. 線程間的合作:生產者消費者問題
5.1 運行MyProducerConsumerTest.java。正常運行結果應該是倉庫還剩0個貨物。多運行幾次,觀察結果,並回答:結果正常嗎?哪裏不正常?為什麽?
- 不正常,放入取出一百件貨物結果應該為0件貨物,但是有的時候結果是10件貨物。
5.2 使用synchronized, wait, notify解決該問題(關鍵代碼截圖,需出現學號)
3.碼雲及PTA
3.1. 碼雲代碼提交記錄
3.2 截圖"多線程"PTA提交列表
3.3 統計本周完成的代碼量
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 0 |
4 | 437 | 437 | 7 | 7 |
5 | 905 | 468 | 13 | 6 |
6 | 1294 | 389 | 21 | 8 |
7 | 1678 | 384 | 30 | 9 |
8 | 2184 | 506 | 42 | 12 |
9 | 2678 | 494 | 56 | 14 |
10 | 3126 | 448 | 74 | 18 |
11 | 3648 | 522 | 96 | 24 |
201621123021《JAVA程序設計》第十一周學習總結