20165312 2017-2018-2《JAVA程序設計》第8周學習總結
阿新 • • 發佈:2018-04-23
應該 生命周期 article isa 出了 虛擬 正在 pop origin
20165312 2017-2018-2《JAVA程序設計》第8周學習總結
一、第十二章知識點總結
- 進程與線程
- 進程是程序的一次動態執行進程,它對應了從代碼加載、執行至執行完畢的一個完整過程
- 線程不是進程,一個進程在其執行過程中,會產生多個線程,線程間可以共享進程中的代碼和數據。
- 沒有進程就沒有線程
- 多線程
- 多線程是指一個應用程序中同時存在幾個執行體,按幾條不同的執行線索共同工作的情況。
- 計算機只能執行多個線程中的一個,java虛擬機快速的把控制從一個線程切換至另一個線程。
- JVM一直要等到java應用程序中的所有線程都結束,才結束java應用程序
- 線程的狀態與生命周期
- 新建:當一個Thread類或者其子類的對象被聲明並創建時,線程對象處於新建狀態,有了相應的內存空間和其他資源
- 運行:調用
start()
方法進行排隊,調用run()
方法立刻執行 - 中斷
- 死亡:一個正常運行的線程正常完成了他的全部工作或者被提前強制性終止、
- java中的線程調度器負責管理線程,線程的優先級通過
setPriority(int grade)
方法調整。 - Thread類及其子類與線程的創建
- 編寫Thread類的子類時,需要重寫
run()
方法 - Thread創建線程通常使用構造方法:
Thread(Runnable target)
- 編寫Thread類的子類時,需要重寫
- 目標對象與線程的關系
- 目標對象和線程完全解耦:目標對象通常需要獲得線程的名字
String name = Thread.currentThread().getName();
- 目標對象組合線程(弱耦合):目標對象通常需要獲得線程的引用
Thread.currentThread();
- 目標對象和線程完全解耦:目標對象通常需要獲得線程的名字
- 線程的常用方法
start()
run()
sleep(int millsecond)
參數millsecond是以毫秒為單位的休眠時間,如果線程在休眠時被打斷,JVM就會拋出InterruptedException異常isAlive()
返回true或者falsecurrentThread()
Thread類中的類方法,可以用類名調用interrupt()
吵醒休眠的線程
- 線程同步
- 線程同步:若幹個線程都需要使用一個synchronized方法
- 線程同步機制:當一個線程A使用同步方法時,其他線程想使用這個同步方法時就必須等待
- 線程聯合
B.join();
- 計時器線程
Timer(int a,Object b)
創建一個計時器 - 守護線程:
thread.setDaemon(true)
可以將自己設置成一個守護線程
二、錯題總結
- 下列屬於常用數據庫的是( )
A . Access
B . XAMMP
C . MySQL
D . Oracle
E . SQL Server
答案:ACDE(XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包。)
- 接口RowSet繼承了接口__,可以調用RowSet中的方法__來填充其數據區。( )
①Statement ②ResultSet ③update ④populate
A . ①③
B . ①④
C . ②③
D . ②④
答案:C
- executeUpdate返回的類型是int,代表的含義是受影響的記錄( )
A . true
B . false
答案:A
三、本周遇到的問題以及解決方法
- 在做本周測試的時候,設置好數據庫和表之後,運行程序不對,反復檢查代碼沒有問題,最後發現時沒有先和數據庫連接,犯了一個特別傻逼的錯誤,差一點過了測試的時間,時間很急就沒有截圖。。。
- 在看第十二章代碼的時候,後面的GUI線程、計時器線程和應用舉例用到了第九章的內容,有些看不懂。回頭粗略的看下第九章的內容,感覺還是沒有理解透徹,等我把第九章系統看完之後再把那幾個代碼重新看一遍吧,這樣理解更深刻一點吧。。
- 不知道為啥吧,向碼雲上傳代碼的時候又一次出了問題。問題是“更新被拒絕,當前分支的最新提交落後於其對應的遠程分支”,截圖如下
!
解決方法:
(1)$ git fetch origin
!
(2)Ctrl+X
(3)$ git push origin master
參考:更新被拒絕,因為您當前分支的最新提交落後於其對應的遠程分支
- 做本周的測試題目的時候對守護線程的理解不深,然後在網上找了找有關守護線程的資料。
(1)將線程轉換為守護線程可以通過調用Thread對象的setDaemon(true)
方法來實現
(2) thread.setDaemon(true)
必須在thread.start()
之前設置,否則會跑出一個IllegalThreadStateException異常。你不能把正在運行的常規線程設置為守護線程。
(3)在Daemon線程中產生的新線程也是Daemon的。
(4)守護線程應該永遠不去訪問固有資源,如文件、數據庫,因為它會在任何時候甚至在一個操作的中間發生中斷。
參考:守護線程(Daemon Thread)
代碼托管
本周代碼截圖
20165312 2017-2018-2《JAVA程序設計》第8周學習總結