Java核心技術 卷1 多線程
<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 多線程