背景:java知識比較寬泛,最好對每一類知識點進行分類總結,方便後面學習查看。該文主要用來總結多線程方面的知識點。html
併發性(concurrency)和並行性(parallel)是兩個概念——java
並行指在同一時刻,有多條指令在多個處理器上同時執行;git
併發指在同一時刻只能有一條指令執行,但多個進程指令被快速輪換執行,使得在宏觀上具備多個進程同時執行的效果。github
出自《瘋狂java講義》第16章 多線程編程
1. 初始(NEW):新建立了一個線程對象,但尚未調用start()方法。 2. 運行(RUNNABLE):Java線程中將就緒(ready)和運行中(running)兩種狀態籠統的稱爲「運行」。 線程對象建立後,其餘線程(好比main線程)調用了該對象的start()方法。該狀態的線程位於可運行線程池中,等待被線程調度選中,獲取CPU的使用權,此時處於就緒狀態(ready)。就緒狀態的線程在得到CPU時間片後變爲運行中狀態(running)。 3. 阻塞(BLOCKED):表示線程阻塞於鎖。 4. 等待(WAITING):進入該狀態的線程須要等待其餘線程作出一些特定動做(通知或中斷)。 5. 超時等待(TIMED_WAITING):該狀態不一樣於WAITING,它能夠在指定的時間後自行返回。 6. 終止(TERMINATED):表示該線程已經執行完畢。
ps:初始(new)、運行(runnable)、阻塞(blocked)、等待(waiting)、超時等待(timed_waiting)、終止(terminated)併發
CyC2018post
https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Java%20%E5%B9%B6%E5%8F%91.md#sleep學習
什麼狀況下會拋出InterruptedException,爲何會拋出?spa
Java線程之 InterruptedException 異常
sleep()和wait()方法的最大區別是:
sleep()睡眠時,保持對象鎖,仍然佔有該鎖;
而wait()睡眠時,釋放對象鎖。
可是wait()和sleep()均可以經過interrupt()方法打斷線程的暫停狀態,從而使線程馬上拋出InterruptedException(但不建議使用該方法)。
Java併發之AQS(AbstractQueuedSynchronizer)原理講解
ps:其中有兩個知識點,CAS原理和volatile原理講解的很透徹。
Java併發編程:CountDownLatch、CyclicBarrier和Semaphore
Java多線程系列--「基礎篇」09之 interrupt()和線程終止方式
ps:線程池的工做流程,如何合理配置線程池,線程池的監控
ps:線程池的基本用法 會手寫
本身彙總