201621123065《JAVA程序設計》第11周學習總結

1. 本周學習總結

1122356-20171201204458042-1601639878.png

2. 書面作業

1. 源代碼閱讀:多線程程序BounceThread

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

BallRunnable類實現Runnable接口,支持多線程;調用Thread.sleep進行休眠則在規定時間內不參與參與到CPU競爭,讓線程休眠就可以看到小球的運動軌跡,如果時間為0即Thread.Sleep(0),就觸發操作系統立刻重新進行一次CPU競爭就看不見軌跡。

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

  • 實現小球的移動方法;獲得小球的坐標和大小
  • BallComponent對象的作用是添加小球和畫出小球
  • ArrayList用于存放小球
  • 運行中生成了一個BallComponent對象
  • 是的每個小球是分別在不同的線程中進行繪制

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

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

    定義Runniable接口比繼承Thread類實現多線程的好處:
  • 適合多個相同代碼的線程去處理同一個資源的情況
  • 可以避免由于java的單繼承特性帶來的局限
  • 增強了程序的健壯性,代碼能夠被多個線程共享,代碼與數據時獨立的

6-1實驗總結:
創建MyThread類對象時指定循環次數n,再創建一個輸出從0到n-1的整數的任務即可。

6-3實驗總結:
創建代表任務的Runnable實現類的對象,在任務里面寫要求的三行輸出。

6-11實驗總結:
這個題與6-1相似,就是要多實現一個Runnable接口。

2.2 使用Lambda表達式改寫6-3

改寫如下:

Thread t1 new Thread (( ) - >{System.out.println(mainThreadName);System.out.println(Thread.currentThread().getName());System.out.println(Arrays.toString(getClass().getInterfaces()));});

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

a)不能使用stop()!!!stop()方法已經被廢棄;可以使用共享變量的方式,共享變量可以被多個執行相同任務的線程用來作為是否中斷的信號,通知中斷線程的執行;也可以使用interrupt方法終止線程,這種方法用于線程阻塞時終止線程。

b)public void stopMe();和public void sendWord(String word)方法就編寫語句flag = true;this.word = word;就可以實現,主要是run()方法,對word包含alien按格式進行輸出,要注意加入while(!flag)語句來判斷程序的執行或終止。

3. 互斥訪問

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

1122356-20171202153444214-840832392.png
1122356-20171202153502479-1901927460.png

4. 互斥訪問與同步訪問

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

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

public static void addId() {synchronized (Counter.class) {id++;}
}

用synchronized的同步代碼塊實現互斥同步訪問

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

同步代碼塊 :
即有synchronized關鍵字修飾的語句塊。
被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步
方法如下:

synchronized(object){ }

同步方法?:
? ? 即有synchronized關鍵字修飾的方法。?
? ? 由于java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時,?
? ? 內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處于阻塞狀態。
方法:

public synchronized void save(){}

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

原理:對象鎖,在程序中,每個對象都有一把鎖,只有獲得了對象鎖,才能執行相應的synchronized代碼塊或者方法,共享資源在一個時間段內只允許一個線程訪問,訪問完了另一個線程才能訪問,運用synchronized關鍵字代碼如下;

class Counter {private static int id = 0;public synchronized static void addId() {id++;}public synchronized static void subtractId() {id--;}public static int getId() {return id;}
}

某一線程競爭獲得對象鎖,其余線程在等待池中等待線程釋放對象鎖,當線程釋放對象鎖其余線程又開始競爭對象鎖,直到程序結束

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

使用wait ()、notify()、notifyAll()關鍵字實現線程之間的通信

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

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

1122356-20171202155108886-267959641.png

1122356-20171202155232745-1762071427.png
兩次放入取出相同,但結果卻不一樣;因為producer和consumer的存取速度不一致,線程之間沒有合作就會產生錯亂

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

1122356-20171202160805741-598790092.png
1122356-20171202160833710-182243682.png

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

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

6.2 運行視頻

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

3.碼云及PTA

3.1. 碼云代碼提交記錄

1122356-20171202165817960-795804030.png

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

1122356-20171202165333179-2137651910.png
1122356-20171202165400991-121400147.png

3.3 統計本周完成的代碼量

1122356-20171202164852507-1097353668.png

周數行數新增行數文件數新增文件數
第一周393999
第二周278239189
第三周4311533315
第四周894182519
第五周11542606716
第六周13542007912
第七周1463109856
第八周177631310116
第九周19031271065
第十周213623312216
第十一周286172514624

轉載于:https://www.cnblogs.com/201621123065guo/p/7918418.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370378.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue使用v-for循環,動態修改element-ui的el-switch

在使用element-ui的el-switch中&#xff0c;因為要用v-for循環&#xff0c;一直沒有成功&#xff0c;后來仔細查看文檔&#xff0c;發現可以這樣寫 <el-switch v-for"(item, key) in list" v-model"item.is" :key"key" :active-value"…

前端加按鈕將圖片另存為_Windows 10系統如何將自己的照片制作成文件夾圖標

我們大家都在電腦上建有很多文件夾&#xff0c;有時候查找自己需要的資料文件夾時不太容易&#xff0c;很浪費時間。如果將自己的照片作為常用文件夾的圖標&#xff0c;看起來醒目查找時也更為方便些。下面就介紹具體的操作教程。一、將照片格式轉換為圖標文件格式在電腦上將圖…

codeforces 125 A-E 補題

A Measuring Lengths in Baden 進制轉換 水題 #include<bits/stdc.h> using namespace std;int main() {int n;scanf("%d",&n);int an/36;n-a*36;int b(n)/3;if((n%3)>2)b;while(b>12)b-12,a1;printf("%d %d\n",a,b);return 0; }B Simple …

在JAXB解組期間應用名稱空間

對于某些XML模式來說&#xff0c;它是一組嚴格的規則&#xff0c;用于規定XML文檔的結構方式。 但是對于其他人來說&#xff0c;通常的準則是指出XML的外觀。 這意味著有時出于某些原因人們希望接受不符合XML模式的輸入。 在此示例中&#xff0c;我將演示如何利用SAX XMLFilter…

java怎么把文件寫入到usb里_如何創建PowerShell腳本以將文件復制到USB閃存驅動器?...

此代碼最后準備使用可移動驅動器(例如插入的USB驅動器)&#xff1a;$drives [System.IO.DriveInfo]::GetDrives()$r $drives | Where-Object { $_.DriveType -eq Removable -and $_.IsReady }if ($r) {return ($r)[-1]}throw "No removable drives found."這種方式…

利用css transition屬性實現一個帶動畫顯隱的微信小程序部件

我們先來看效果圖 像這樣的一個帶過渡效果的小部件在我們實際開發中的應用幾率還是比較大的&#xff0c;但是在開發微信小程序的過程中可能有的小伙伴發現transition這個屬性它不好使&#xff08;下面說明&#xff09;所以我們這個時候會考慮去使用微信官方提供的wx.createAnim…

c語言學生管理系統鏈表(dev vs2012下可以運行)

struct student { char name[10]; char sex[5]; long int num;//學號 int xuhao; int age; float score[3]; float averange; char DJ;//存放等級哦 struct student *next;};//定義結構體變量保存 名字 性別 年齡 成績] 結構體聲明int n;//存放學生人數int man;//存放統計的男生…

python 東哥 with open_python 連接redis cluster

#!/usr/bin/env python# encoding: utf-8#author: 東哥加油!#file: clear_pool.py#time: 2018/8/28 17:06from rediscluster import StrictRedisClusterimport datetimeimport sysdef redis_cluster():redis_nodes [{host:192.168.15.6,port:6379},{host:192.168.15.7,port:63…

go gcc

http://www.cnblogs.com/zkweb/p/7880099.html轉載于:https://www.cnblogs.com/thrillerz/p/7958446.html

抽象工廠設計模式解釋

抽象工廠設計模式是工廠設計模式的另一種形式。 這種模式可以被視為“超級工廠”或“工廠工廠”。 抽象工廠設計模式&#xff08;屬于“四人幫”的一部分&#xff09;屬于“創新設計模式”類別&#xff0c;它提供了一種封裝一組具有公共鏈接的工廠的方法&#xff0c;而無需突出…

app賬號退不出去_最新!多交的稅可以退,同學,你今天退稅了嗎?

4.3 號 更新。1、有知友留言&#xff0c;已經收到退稅了。2、部分地區陸續開放申報了&#xff0c;建議大家不要著急。3、大家耐心一點&#xff0c;該是你的就是你的&#xff0c;退稅這個事多退少補&#xff0c;建議大家在白天上班時間去APP上看看&#xff0c;畢竟相關公務人員也…

【BZOJ2004】[Hnoi2010]Bus 公交線路 狀壓+矩陣乘法

【BZOJ2004】[Hnoi2010]Bus 公交線路 Description 小Z所在的城市有N個公交車站&#xff0c;排列在一條長(N-1)km的直線上&#xff0c;從左到右依次編號為1到N&#xff0c;相鄰公交車站間的距離均為1km。 作為公交車線路的規劃者&#xff0c;小Z調查了市民的需求&#xff0c;決定…

課時77.序選擇器(掌握)

CSS3中新增的選擇器最具代表性的就是序選擇器。 1.同級別的第幾個 1. :first-child 選中同級別中的第一個標簽 注意點&#xff1a;不區分類型 但是我們這里有一個注意點&#xff0c;如果我們在第一個p之前加一個h1&#xff0c;則第一個p就不變紅了&#xff0c;因為我們…

Gulp——文件壓縮和文件指紋

先看下文件指紋添加成功發布后的“成果”。 首先介紹下gulp的文件壓縮&#xff08;壓縮css和js&#xff09; &#xff08;下面介紹的代碼移步這里&#xff09; 我的文件目錄如下&#xff1a; &#xff08;標紅部分是生成的處理后的文件&#xff09; 如何使用gulp&#xff0c;請…

java afconsole_Java ——基礎語法

package myhello; //本類所在的包的路徑import af.util.AfMath;//導入對應的類import java.util.Random;//導入隨機數的類public classHelloWorld{public static voidmain(String[] args){int a 8;inti;int total 0;int score 80;System.out.println(a > 8);//空語句 只有…

Java 7:使用NIO.2進行文件過濾-第2部分

大家好。 這是使用NIO.2系列進行文件過濾的第2部分。 對于那些尚未閱讀第1部分的人 &#xff0c;這里有個回顧。 NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以執行與java.io相同的操作&#xff0c;以及許多出色的功能&#xff0c;例如&a…

js for 循環 添加tr td 算法

StringBuffer sbnew StringBuffer(); int n 5; sb.append("<tr>"); List<MenuBean> chs mb.getChildren(); for(int j 0; chs ! null && j < chs.size(); j){ MenuBean _mb2 chs.get(j); if (i % n 0)//被n整除&#xff0c;即有了n列之后…

1034. 二哥的金鏈

Description 一個陽光明媚的周末&#xff0c;二哥出去游山玩水&#xff0c;然而粗心的二哥在路上把錢包弄丟了。傍晚時分二哥來到了一家小旅店&#xff0c;他翻便全身的口袋也沒翻著多少錢&#xff0c;而他身上唯一值錢的就是一條漂亮的金鏈。這條金鏈散發著奇異的光澤&#xf…

課時76.兄弟選擇器(掌握)

我們先來明確一點&#xff0c;什么是兄弟&#xff1f; 比如&#xff0c;head和body是兄弟&#xff0c;必須是同級關系&#xff0c;如果是嵌套關系&#xff0c;兒子&#xff0c;孫子則不可以。 1.相鄰兄弟選擇器 CSS2 作用&#xff1a;給指定選擇器后面緊跟的那個選擇器選中的…

java中不能定義為變量名稱_Java,“變量名”不能解析為變量

我使用Java使用Eclipse&#xff0c;出現此錯誤&#xff1a;"Variable name" cannot be resolved to a variable.使用此Java程序&#xff1a;public class SalCal {private int hoursWorked;public SalCal(String name, int hours, double hoursRate) {nameEmployee …