20165105 第八週學習總結

 第十二章學習總結

進程與線程:進程和線程都是一個時間段的描述,是CPU工做時間段的描述。進程是程序的一次動態執行過程;線程是比進程更小的執行單位git

   區別:
          (1)進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元
          (2)同一個進程中能夠包括多個線程,而且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進行至少包括一個線程。
          (3)進程的建立調用fork或者vfork,而線程的建立調用pthread_create,進程結束後它擁有的全部線程都將銷燬,而線程的結束不會影響同個進程中的其餘線程的結束
          (4)線程是輕兩級的進程,它的建立和銷燬所須要的時間比進程小不少,全部操做系統中的執行功能都是建立線程去完成的
          (5)線程中執行時通常都要進行同步和互斥,由於他們共享同一進程的全部資源
          (6)線程有本身的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有本身的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標誌
 

線程的狀態與生命週期學習

  • Java語言使用Thread類及其子類的對象來表示線程,完整的生命週期要經歷一下狀態:
    1. 新建
    2. 運行:必須調用start()方法通知JVM纔會運行
    3. 中斷: 四種緣由中斷
    4. 死亡:緣由有二,一爲正常運行結束;二爲線程被強制提早結束,即強制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操作系統

相關文章
相關標籤/搜索