201621123080《Java程序設計》第十一週學習總結

201621123080《Java程序設計》第十一週學習總結

1. 本週學習總結

1.1 以你喜歡的方式(思惟導圖或其餘)概括總結多線程相關內容。

2. 書面做業

本次PTA做業題集多線程java

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

改寫的代碼以下:3d

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的值來使循環結束從而結束這個線程;
6-2 忘記判斷空耽誤了時間code

3. 互斥訪問

3.1 修改TestUnSynchronizedThread.java源代碼使其能夠同步訪問。(關鍵代碼截圖,需出現學號)

4. 互斥訪問與同步訪問

完成題集6-4(互斥訪問)與6-5(同步訪問)component

4.1 除了使用synchronized修飾方法實現互斥同步訪問,還有什麼辦法可使用synchronized實現互斥同步訪問,使用代碼說明(請出現相關代碼及學號)?

同步代碼塊;視頻

4.2 同步代碼塊與同步方法有何區別?

同步方法是方法名用synchronized修飾;
同步代碼塊只在內部使用synchonrized加鎖,範圍小;對象

4.3 實現互斥訪問的原理是什麼?請使用對象鎖概念並結合相應的代碼塊進行說明。當程序執行synchronized同步代碼塊或者同步方法時,線程的狀態是怎麼變化的?

有鎖的線程執行,其他的線程沒法打擾,且在Lock Pool等待鎖的釋放;
無鎖線程進入Look Pool狀態,等待鎖被釋放。鎖釋放後,線程進入Runnable狀態,線程執行完畢釋放鎖。如此循環。

4.4 Java多線程中使用什麼關鍵字實現線程之間的通訊,進而實現線程的協同工做?

用等wait,通知notify,互斥synchronized實現線程之間的通訊;

5. 線程間的合做:生產者消費者問題

5.1 運行MyProducerConsumerTest.java。正常運行結果應該是倉庫還剩0個貨物。多運行幾回,觀察結果,並回答:結果正常嗎?哪裏不正常?爲何?

運行結果是混亂的,反覆出現無貨、已滿;
線程處理數據的速度不一樣,致使混亂;

5.2 使用synchronized, wait, notify解決該問題(關鍵代碼截圖,需出現學號)

6. 面向對象設計做業-圖書館管理系統

6.1 系統的功能模塊表格,表格中體現出每一個模塊的負責人。

負責人 功能
Main 朱匯盈 控制程序
User、BookInfo 劉思遠 用戶信息、圖書信息
BookList 陳劍波 書庫管理

6.2 運行視頻

6.3 講解本身負責的模塊,並粘貼本身負責模塊的關鍵代碼(出現學號及姓名)。

全部圖書存儲在 list裏:
private static ArrayList<BookInfo> list = new ArrayList<BookInfo>();

//按書號、名稱查找
public static int searchNo(long no) 
public static int[] searchNameAll(String name)
//借書和還書
public static boolean borrow(long no,long boNo)
public static void returnBook(long no,long boNo)
//刪除、添加、修改書籍
public static void del(long no)
public static void add(String name,long no,String author,boolean isBorrow,long boNo) 
public static void changeList(String name,long no,String author,boolean isBorrow,long boNo) 
//顯示書籍
public static void show()
public static BookInfo getOne(int po)

3.碼雲及PTA

題目集:多線程

3.1. 碼雲代碼提交記錄

在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
必須出現幾個要素:提交日期-用戶名(姓名與學號)-不提交說明

3.2 截圖"多線程"PTA提交列表

須要有兩張圖(1. 排名圖。2.PTA提交列表圖)

3.3 統計本週完成的代碼量

須要將每週的代碼統計狀況融合到一張表中。

周次 總代碼量 新增代碼量 總文件數 新增文件數
1 0 0 0 0
2 0 0 0 0
3 472 472 11 11
4 472 0 11 0
5 468 -4 12 1
6 1043 575 30 18
7 2417 1374 51 21
8 5129 2712 83 32
9 5284 155 89 6
10 5714 430 98 9
11 5995 281 105 7
12 6365 370 114 9

相關文章
相關標籤/搜索