1. 程式人生 > >201621123021《JAVA程序設計》第十一周學習總結

201621123021《JAVA程序設計》第十一周學習總結

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程序設計》第十一周學習總結