標籤:2.4 start 休眠 question 繪製 不提交 執行 thread 結合
未完成,周日一定完成
- 本周學習總結
1.1 以你喜歡的方式(思維導圖或其他)歸納總結多線程相關內容。
- 書面作業
本次PTA作業題集多線程
- 原始碼閱讀:多線程程式BounceThread
1.1 BallRunnable類有什麼用?為什麼代碼中需要調用Thread.sleep進行休眠?
1.2 Ball.java只做了兩件事,這兩件事分別是什嗎?BallComponent對象是幹什麼的?其內部的ArrayList有什麼用?程式運行過程中,產生了幾個BallComponent對象?該程式使用了多線程技術,每個小球是分別在不同的線程中進行繪製嗎?
1.3 選做:程式改寫:程式運行時,每個小球都是從固定位置出發。如何改寫該程式,使得當點擊start時,每個小球可以從不同位置出發、以不同的步進移動?
1.4 選做:不同小球的移動軌跡一模一樣。改造程式,使得每個小球運行軌跡不完全一樣,比如有的可以走餘弦軌跡、有的可以走方波軌跡、有的走布朗運動、有的走五角星,等等。
- 實驗總結:題集(多線程)
2.1 題目:Thread、PrintTask、Runnable與匿名內部類。
並回答:a)通過定義Runnable介面的實作類別來實現多線程程式比通過繼承自Thread類實現多線程程式有何好處?b) 6-1,6-3,6-11實驗總結。
2.2 使用Lambda運算式改寫6-3
2.3 題目:6-2(Runnable與停止線程)。回答:需要怎樣才能正確地停止一個運行中的線程?
2.4 選做:6-8(CountDownLatch)實驗總結
2.5 選做:6-9(集合約步問題)實驗總結
2.6 選做:較難:6-10(Callable),並回答為什麼有Runnable了還需要Callable?實驗總結。
- 互斥訪問
3.1 修改TestUnSynchronizedThread.java原始碼使其可以同步訪問。(關鍵代碼,需出現學號)
3.2 選做:進一步使用執行器改進相應代碼(關鍵代碼,需出現學號)
參考資料:Java多線程之Executor、ExecutorService、Executors、Callable、Future與FutureTask
- 互斥訪問與同步訪問
完成題集6-4(互斥訪問)與6-5(同步訪問)
4.1 除了使用synchronized修飾方法實現互斥同步訪問,還有什麼辦法可以使用synchronized實現互斥同步訪問,使用代碼說明(請出現相關代碼及學號)?
4.2 同步代碼塊與同步方法有何區別?
4.3 實現互斥訪問的原理是什嗎?請使用對象鎖概念並結合相應的代碼塊進行說明。當程式執行synchronized同步代碼塊或者同步方法時,線程的狀態是怎麼變化的?
4.4 Java多線程中使用什麼關鍵字實現線程之間的通訊,進而實現線程的協同工作?
- 線程間的合作:生產者消費者問題
5.1 運行MyProducerConsumerTest.java。正常運行結果應該是倉庫還剩0個貨物。多運行幾次,觀察結果,並回答:結果正常嗎?哪裡不正常?為什嗎?
5.2 使用synchronized, wait, notify解決該問題(關鍵代碼,需出現學號)
5.3 選做:使用Lock與Condition對象解決該問題。
- 物件導向設計作業-圖書館管理系統
6.1 系統的功能模組表格,表格中體現出每個模組的負責人。
6.2 運行視頻
6.3 講解自己負責的模組,並粘貼自己負責模組的關鍵代碼(出現學號及姓名)。
- 選做:使用其他方法解決題目5的生產者消費者問題。
7.1 使用BlockingQueue解決生產者消費者問題關鍵代碼
7.2 說明為什麼不需要顯示的使用wait、notify就可以解決同步問題。這樣解決相比較wait、notify有什麼優點嗎?
7.3 使用Condition解決生產者、消費者問題。
選做:編寫一段代碼,證明你會使用ForkJoinPool.
選做:單元測試JUint4
實驗任務書中的題目6:單元測試使用JUnit4。
使用JUnit4對兩個排序演算法的排序時間進行比較,並。
3.碼雲及PTA
題目集:多線程
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits曆史-設定時間段”, 然後搜尋並
必須出現幾個要素:提交日期-使用者名稱(姓名與學號)-不提交說明
3.2 "多線程"PTA提交列表
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
- 選做:課外閱讀
4.1 Java Concurrent Animated
4.2 線程的進階知識筆記
4.3 Questions and Exercises: Concurrency,學習總結。
4.4 Java多線程之Executor、ExecutorService、Executors、Callable、Future與FutureTask
4.5 線程池,這一篇或許就夠了
4.6 Java 8 Concurrency Tutorial: Threads and Executors
Java作業-多線程