1. 程式人生 > >Java核心技術 卷1 多線程

Java核心技術 卷1 多線程

靜態方法 dex 一個 之一 之間 wait方法 com term 操作符

<1>什麽是線程

  一個程序同時執行多個任務,每個任務稱為一個線程(thread),它是線程控制的簡稱。可以同時運行一個以上線程的程序稱為多線程程序(nultithreaded)。

<2>多進程與多線程有哪些區別

  本質的區別在於每個進程擁有自己的一整套變量,而線程共享數據。共享變量使線程之間的通信比進程之間的通信更有效、更容易。

Thread方法

  • void interrupt()

  向線程發送中斷請求。線程的中斷狀態將被設置為true.如果目前該線程被一個sleep調用阻塞,那麽,InterruptedException異常被拋出。

  • static bollean interrupted()

  測試當前線程(即正在執行這一命令的線程)是否被 中斷。註意,這是一個靜態方法。這一調用會產生副作用----它將當前線程的中斷狀態重置為false.

  • boolean inInterrupted()

  測試線程是否被終止。不像靜態的中斷方法,這一調用不改變線程的中斷狀態。

  • static Thread currentThread()  

  返回當前執行線程的Thread對象

  <3>線程的狀態 (6種)

  • New(新創建)

   當用new操作符創建一個新線程時,如new Thread(r),該線程還沒有開始運行。這意味著它的狀態是new.

  • Runnable(可運行)

   一旦調用start方法,線程處於runnable狀態。一個可運行的線程可能正在運行也可能沒有運行,這取決於操作系統給線程提供運行的時間。(一個可運行的線程可能正在運行也可能沒有運行)

  • Blocked(被阻塞)
  • Waiting(等待)

   當線程處於被阻塞或等待狀態時,它暫時不活動。它不運行任何代碼且消耗最少的資源。直到線程調試器重新激活它。

  (1)當一個線程試圖獲取一個內部的對象鎖,而該鎖被其它線程持有,則該線程進入阻塞狀態。當所有其它線程釋放該鎖,並且線程調度器允許本線程持有它的時候,該線程將變成非阻塞狀態。

  (2)當線程等待另一個線程通知調度器一個條件時,它自己進入等待狀態。在調用Object.wait方法或Thread.join方法,或者是等待java.util.concurrent庫中的Lock或Condition時,就會出現這種情況。

  • Timed waiting(計時等待)

  有幾個方法有一個超時參數。調用它們導致線程進入計時等待(time waiting)狀態。這一狀態將一直保持到超時期滿或者接收到適當的通知。帶有超時參數的方法有Thread.sleep和Object.wait、Thread.join、Lock.tryLock以及Condition.await的計時版。

  • Terminated(被終止)

  線程因如下兩個原因之一而被終止:

  (1)因為run方法正常退出而自然死亡。

  (2)因為一個沒有捕獲的異常終止了run方法而意外死亡。

技術分享圖片

Java.lang.Thread

  • void join()

  等待終止指定的線程

  • void join(long millis)

  等待指定線程死亡或者經過指定的毫秒數。

  • Thread.State getState()

  得到這一線程的狀態;New、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING或TERMINATED之一。

  • void stop()

  停止該線程。(過時)

  • void suspend()

  暫停這一線程的執行(過時)

  • void resume()

  恢復線程。這一方法僅僅在調用suspend()之後調用。(過時)

Java核心技術 卷1 多線程