1. 程式人生 > >201621123006 《Java程序設計》第11周學習總結

201621123006 《Java程序設計》第11周學習總結

str stop 除了 列表 string 畫出 創建 java源代碼 array

1. 本周學習總結

1.1 以你喜歡的方式(思維導圖或其他)歸納總結多線程相關內容。

技術分享圖片


2. 書面作業

本次PTA作業題集多線程
1. 源代碼閱讀:多線程程序BounceThread

1.1 BallRunnable類有什麽用?為什麽代碼中需要調用Thread.sleep進行休眠?

  • BallRunnable實現了Runnable接口。
  • 當線程執行太快時需要進行休眠,在這個題中,如果不進行休眠我們就看不到小球的運動軌跡了。另一方面,為了讓其他線程有機會執行也需要休眠。

1.2 Ball.java只做了兩件事,這兩件事分別是什麽?BallComponent對象是幹什麽的?其內部的ArrayList有什麽用?程序運行過程中,生成了幾個BallComponent對象?該程序使用了多線程技術,每個小球是分別在不同的線程中進行繪制嗎?

  • Ball.javamove()使小球移動getShape()獲取小球的大小和位置。
  • 添加並畫出一個新的小球。
  • ArrayList用來存放這些小球。
  • 一個。
  • 每點擊一次start就會啟動一個線程,所以每個小球都是在自己的線程中繪制的。

2. 實驗總結:題集(多線程)

2.1 題目:Thread、PrintTask、Runnable與匿名內部類。
並回答:a)通過定義Runnable接口的實現類來實現多線程程序比通過繼承自Thread類實現多線程程序有何好處?b) 6-1,6-3,6-11實驗總結。

  • 1、Runnable接口適合多個相同程序代碼的線程共享同一個資源。
    2、當我們使用一個已經繼承了某個類的子類來創建線程時,由於一個類不能同時有兩個父類,所以不能用繼承Thread類的方式,那麽就只能選擇實現Runnable接口的方式。
  • 實驗總結:
    6-1就是編寫MyThread類繼承自Thread,在MyThread中重寫run方法,用System.out.println(Thread.currentThread().getName()+" "+isAlive());語句輸出。
    6-3啟動一個線程,使用System.out.println(Arrays.toString(getClass().getInterfaces()));打印三行信息。
    6-11實現Runnable接口,在run方法中輸出整數0~n-1。

2.2 使用Lambda表達式改寫6-3
技術分享圖片

2.3 題目:6-2(Runnable與停止線程)。回答:需要怎樣才能正確地停止一個運行中的線程?

  • Thread類中可以用stop()方法來終止線程,但是很不安全,當線程發生阻塞時,我們可以使用interrupt()方法,雖然它不會中斷一個正在運行的線程,但它可以使一個被阻塞的線程拋出一個中斷異常,從而使線程提前結束阻塞狀態,退出堵塞代碼。

3. 互斥訪問

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

技術分享圖片


4. 互斥訪問與同步訪問

完成題集6-4(互斥訪問)與6-5(同步訪問)
4.1 除了使用synchronized修飾方法實現互斥同步訪問,還有什麽辦法可以使用synchronized實現互斥同步訪問,使用代碼說明(請出現相關代碼及學號)?

技術分享圖片

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

  • 同步方法是像3.1那樣直接在方法名前加上synchronized,而同步代碼塊則是在方法內部加synchronized關鍵字。

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

  • 通過對共享資源進行上鎖來實現互斥訪問。
  • 線程狀態變化:當一個線程開始運行的時候,我們給它所訪問的方法上一把鎖,此時,其他線程不能訪問該方法,待當前的線程執行完後,給它解鎖,第二個線程開始訪問(此時其他線程也無法訪問該方法),以此類推直到所有線程停止運行。

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

  • 使用wait()notify()方法來實現線程的協同工作。

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

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

技術分享圖片
技術分享圖片

  • 不正常。倉庫中還有貨物時運行結果顯示無貨。這是添加和出庫的速度不一樣導致的。

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

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

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

6.2 運行視頻
6.3 講解自己負責的模塊,並粘貼自己負責模塊的關鍵代碼(出現學號及姓名)。

3.1. 碼雲代碼提交記錄

技術分享圖片

3.2 截圖"多線程"PTA提交列表
技術分享圖片
技術分享圖片

需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量

技術分享圖片
技術分享圖片

201621123006 《Java程序設計》第11周學習總結