201621123080《Java程序設計》第十一周學習總結
阿新 • • 發佈:2017-12-02
3.1 搜索 必須 定義 mit string 改變 pri 學習總結
201621123080《Java程序設計》第十一周學習總結
1. 本周學習總結
1.1 以你喜歡的方式(思維導圖或其他)歸納總結多線程相關內容。
2. 書面作業
本次PTA作業題集多線程
1. 源代碼閱讀:多線程程序BounceThread
1.1 BallRunnable類有什麽用?為什麽代碼中需要調用Thread.sleep進行休眠?
實現Runnable接口;
休眠讓其他線程執行,減少CPU占用的時間
1.2 Ball.java只做了兩件事,這兩件事分別是什麽?BallComponent對象是幹什麽的?其內部的ArrayList有什麽用?程序運行過程中,生成了幾個BallComponent對象?該程序使用了多線程技術,每個小球是分別在不同的線程中進行繪制嗎?
小球的移動,獲得小球的x,y坐標;添加小球,並在畫面上顯示;
存放小球;生成一個BallComponent對象;在不通線程執行
2. 實驗總結:題集(多線程)
2.1 題目:Thread、PrintTask、Runnable與匿名內部類。
並回答:a)通過定義Runnable接口的實現類來實現多線程程序比通過繼承自Thread類實現多線程程序有何好處?b) 6-1,6-3,6-11實驗總結。
a)實現Runnable接口可以一個任務多個線程執行,繼承只能繼承一個類有很大的局限。
b)
6-2 繼承Thread類即可;
6-3 的Runnable 要 new 否則會提示靜態資源無法訪問動態資源;
6-11 實現runnable接口
2.2 使用Lambda表達式改寫6-3
改寫的代碼如下:
public class Main { public static void main(String[] args) { final String mainThreadName = Thread.currentThread().getName(); Thread t1 = new Thread(); Runnable runnable = ()->{ System.out.println(mainThreadName); System.out.println(t1.getClass().getInterfaces()); System.out.println(Arrays.toString(t1.getClass().getInterfaces())); }; new Thread(runnable).start(); } }
2.3 題目:6-2(Runnable與停止線程)。回答:需要怎樣才能正確地停止一個運行中的線程?
暴力方法stop,但不推薦;
用 while(flag) ,通過改變flag的值來使循環結束從而結束這個線程;
3. 互斥訪問
3.1 修改TestUnSynchronizedThread.java源代碼使其可以同步訪問。(關鍵代碼截圖,需出現學號)
4. 互斥訪問與同步訪問
完成題集6-4(互斥訪問)與6-5(同步訪問)
4.1 除了使用synchronized修飾方法實現互斥同步訪問,還有什麽辦法可以使用synchronized實現互斥同步訪問,使用代碼說明(請出現相關代碼及學號)?
同步代碼塊;
4.2 同步代碼塊與同步方法有何區別?
4.3 實現互斥訪問的原理是什麽?請使用對象鎖概念並結合相應的代碼塊進行說明。當程序執行synchronized同步代碼塊或者同步方法時,線程的狀態是怎麽變化的?
4.4 Java多線程中使用什麽關鍵字實現線程之間的通信,進而實現線程的協同工作?
5. 線程間的合作:生產者消費者問題
5.1 運行MyProducerConsumerTest.java。正常運行結果應該是倉庫還剩0個貨物。多運行幾次,觀察結果,並回答:結果正常嗎?哪裏不正常?為什麽?
5.2 使用synchronized, wait, notify解決該問題(關鍵代碼截圖,需出現學號)
6. 面向對象設計作業-圖書館管理系統
6.1 系統的功能模塊表格,表格中體現出每個模塊的負責人。
類 | 負責人 | 功能 |
---|---|---|
Main | 朱匯盈 | 控制程序 |
User、BookInfo | 劉思遠 | 用戶信息、圖書信息 |
BookList | 陳劍波 | 書庫管理 |
6.2 運行視頻
6.3 講解自己負責的模塊,並粘貼自己負責模塊的關鍵代碼(出現學號及姓名)。
3.碼雲及PTA
題目集:多線程
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然後搜索並截圖
必須出現幾個要素:提交日期-用戶名(姓名與學號)-不提交說明
3.2 截圖"多線程"PTA提交列表
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
201621123080《Java程序設計》第十一周學習總結