摘要:死亡狀態終止狀態線程完成執行后的狀態。守護線程唯一的用途就是為其他線程服務。計時線程就是一個守護線程它定時地發送計時器滴答信號給其他線程或清空過時的高速緩存項的線程。
雖是讀書筆記,但是如轉載請注明出處 http://segmentfault.com/blog/exploring/
.. 拒絕伸手復制黨
線程具有新建、可運行、阻塞、等待、定時等待、死亡六種。線程的狀態完全包含了一個線程從新建到運行,最后到結束的整個生命周期,
線程狀態的具體信息如下:
NEW(新建狀態、初始化狀態):線程對象已經被創建,但是還沒有被啟動時的狀態。這段時間就是在我們調用new命令之后,調用start()方法之前
public enum State { /** * Thread state for a thread which has not yet started. */ NEW,
RUNNABLE(可運行狀態、就緒狀態):在我們調用了線程的start()方法之后線程所處的狀態。處于RUNNABLE狀態的線程在JAVA虛擬機(JVM)上是運行著的,但是它可能還正在等待操作系統分配給它相應的運行資源以得以運行。
一旦一個線程開始運行,它不必始終保持運行。運行中的線程可能被中斷,為了讓其他線程獲得運行機會 -- 線程調度。 現在所有的桌面和服務器OS都使用搶占式調用。
/** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE,
BLOCKED(阻塞狀態、被中斷運行):當一個線程試圖獲取一個內部的對象鎖,而該鎖被其他線程持有,則該線程進入阻塞狀態;當所有其他線程釋放該鎖,并且線程調度器要允許本線程持有它的時候,該線程將變成非阻塞狀態。
/** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchronized block/method or * reenter a synchronized block/method after calling * {@link Object#wait() Object.wait} . */ BLOCKED,
當線程等待另一個線程通知調度器的一個條件時,它自己進入等待狀態。
當前線程調用了java.lang.Object.wait()、java.lang.Thread.join()或者等待java.util.concurrent庫中的Lock或Condition時,就會進入等待狀態。
比如一個線程調用了某個對象的wait()方法,正在等待其它線程調用這個對象的notify()或者notifyAll()(這兩個方法同樣是繼承自Object類)方法來喚醒它;或者一個線程調用了另一個線程的join()(這個方法屬于Thread類)方法,正在等待這個方法運行結束。
/** * Thread state for a waiting thread. * A thread is in the waiting state due to calling one of the * following methods: *
A thread in the waiting state is waiting for another thread to * perform a particular action. * * For example, a thread that has called Object.wait() * on an object is waiting for another thread to call * Object.notify() or Object.notifyAll() on * that object. A thread that has called Thread.join() * is waiting for a specified thread to terminate. */ WAITING,
TIMED_WAITING(定時等待狀態):當前線程調用了java.lang.Object.wait(long timeout)、java.lang.Thread.join(long millis) 、 java.util.concurrent.locks.LockSupport.packNanos(long nanos) 、 java.util.concurrent.locks.LockSupport.packUntil(long deadline 四個方法中的任意一個,進入等待狀態,但是與WAITING狀態不同的是,它有一個最大等待時間,即使等待的條件仍然沒有滿足,只要到了這個時間它就會自動醒來。
* Thread state for a waiting thread with a specified waiting time. * A thread is in the timed waiting state due to calling one of * the following methods with a specified positive waiting time: *
TERMINATED(死亡狀態、終止狀態):
線程完成執行后的狀態。線程執行完run()方法中的全部代碼,從該方法中退出,進入TERMINATED狀態。
還有一種情況是run()在運行過程中拋出了一個異常,而這個異常沒有被程序捕獲,導致這個線程異常終止進入TERMINATED狀態
/** * Thread state for a terminated thread. * The thread has completed execution. */ TERMINATED; }線程的屬性
線程的屬性:線程優先級,守護線程,線程組以及處理未捕獲異常的處理器。
線程優先級java語言,每一個線程有一個優先級. 默認情況,一個線程繼承它父線程的優先級。
可以用setPriority方法降低或提高任何線程的優先級。 使用yield()方法讓當前執行的線程處于讓步,如果有其他的runnable線程具有至少與此線程同樣的優先級,那么這些線程接下來會被調度。
java /** * The minimum priority that a thread can have. */ public final static int MIN_PRIORITY = 1; /** * The default priority that is assigned to a thread. */ public final static int NORM_PRIORITY = 5; /** * The maximum priority that a thread can have. */ public final static int MAX_PRIORITY = 10;守護線程
可以通過調用
t.setDaemon(true);
將線程轉換為守護線程。守護線程唯一的用途就是為其他線程服務。
計時線程就是一個守護線程:它定時地發送“計時器滴答”信號給其他線程或清空過時的高速緩存項的線程。
當只剩下守護線程,JVM就退出了。守護線程不應該去訪問任何固有資源,如文件,數據庫,因為它會在任何時候甚至在一個操作中發生中斷。
未捕獲異常處理器線程run方法不能跑出任何被檢測的異常,但是不被檢測的異常會導致線程終止,這種情況,線程就死亡了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64365.html
摘要:請參看前一篇文章并發學習筆記一原子性可見性有序性問題六等待通知機制什么是等待通知機制當線程不滿足某個條件,則進入等待狀態如果線程滿足要求的某個條件后,則通知等待的線程重新執行。經極客時間并發編程實戰專欄內容學習整理 請參看前一篇文章:Java 并發學習筆記(一)——原子性、可見性、有序性問題 六、等待—通知機制 什么是等待通知—機制?當線程不滿足某個條件,則進入等待狀態;如果線程滿足要...
摘要:最后,總結一下,導致并發問題的三個源頭分別是原子性一個線程在執行的過程當中不被中斷。可見性一個線程修改了共享變量,另一個線程能夠馬上看到,就叫做可見性。 計算機的 CPU、內存、I/O 設備的速度一直存在較大的差異,依次是 CPU > 內存 > I/O 設備,為了權衡這三者的速度差異,主要提出了三種解決辦法: CPU 增加了緩存,均衡和內存的速度差異 發明了進程、線程,分時復用 CP...
摘要:除此之外,把并發安全字典封裝在一個結構體類型中,往往是一個很好的選擇。請看下面的代碼如上所示,我編寫了一個名為的結構體類型,它代表了鍵類型為值類型為的并發安全字典。在這個結構體類型中,只有一個類型的字段。34 | 并發安全字典sync.Map (上)我們今天再來講一個并發安全的高級數據結構:sync.Map。眾所周知,Go 語言自帶的字典類型map并不是并發安全的。前導知識:并發安全字典誕生...
閱讀 860·2021-11-24 09:38
閱讀 1093·2021-10-08 10:05
閱讀 2584·2021-09-10 11:21
閱讀 2807·2019-08-30 15:53
閱讀 1832·2019-08-30 15:52
閱讀 1969·2019-08-29 12:17
閱讀 3421·2019-08-29 11:21
閱讀 1615·2019-08-26 12:17