第十二章學習總結
進程與線程:進程和線程都是一個時間段的描述,是CPU工做時間段的描述。進程是程序的一次動態執行過程;線程是比進程更小的執行單位
git
區別:
(1)進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元
(2)同一個進程中能夠包括多個線程,而且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進行至少包括一個線程。
(3)進程的建立調用fork或者vfork,而線程的建立調用pthread_create,進程結束後它擁有的全部線程都將銷燬,而線程的結束不會影響同個進程中的其餘線程的結束
(4)線程是輕兩級的進程,它的建立和銷燬所須要的時間比進程小不少,全部操做系統中的執行功能都是建立線程去完成的
(5)線程中執行時通常都要進行同步和互斥,由於他們共享同一進程的全部資源
(6)線程有本身的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有本身的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標誌
線程的狀態與生命週期學習
- Java語言使用Thread類及其子類的對象來表示線程,完整的生命週期要經歷一下狀態:
- 新建
- 運行:必須調用start()方法通知JVM纔會運行
- 中斷: 四種緣由中斷
- 死亡:緣由有二,一爲正常運行結束;二爲線程被強制提早結束,即強制run()方法結束。
- 經常使用方法
- start();
- run(),在線程沒有結束run()以前,不要再讓線程調用start()方法,不然將發生IllegalThreadStateException異常
- sleep(int millsecond)必須在try-catch語句塊中調用sleep方法
- isAlive();
- currentThread()返回當前正在使用CPU資源的線程
- interrupt();
- 線程同步機制:當一個線程A使用synchronized方法時,時就必須等待,知道線程A使用完synchronized方法
- 不能夠在非同步方法中使用wait(),notify(),notifyAll()
- A在運行期間使用Join()聯合B,那麼A線程馬上終端執行,一直等待B執行結束,A再從新排隊等待CPU資源
- AWT-EventQuecue線程負責處理GUI事件,AWT-Windows線程負責將窗體或組件繪製到桌面
代碼託管:https://gitee.com/BESTI-IS-JAVA-2018/besti-Java20165105操作系統
