java面試——多線程

背景: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):表示該線程已經執行完畢。

 

 

 Java線程的6種狀態及切換(透徹講解)多線程

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學習

sleep()和yield()方法的區別

什麼狀況下會拋出InterruptedException,爲何會拋出?spa

Java線程之 InterruptedException 異常

sleep()和wait()方法的最大區別是:
    sleep()睡眠時,保持對象鎖,仍然佔有該鎖;
    而wait()睡眠時,釋放對象鎖。
  可是wait()和sleep()均可以經過interrupt()方法打斷線程的暫停狀態,從而使線程馬上拋出InterruptedException(但不建議使用該方法)。

Java中sleep()與wait()區別

CAS與volatile

Java併發之AQS(AbstractQueuedSynchronizer)原理講解
ps:其中有兩個知識點,CAS原理volatile原理講解的很透徹。

最通俗易懂的樂觀鎖與悲觀鎖原理及實現

CountDownLatch、CyclicBarrier和Semaphore

 Java併發編程:CountDownLatch、CyclicBarrier和Semaphore

多線程interrupt()和線程終止方式

Java多線程系列--「基礎篇」09之 interrupt()和線程終止方式

線程池的使用和分析

聊聊併發(三)——JAVA 線程池的分析和使用

ps:線程池的工做流程,如何合理配置線程池,線程池的監控

Java 四種線程池的用法分析

ps:線程池的基本用法 會手寫

 

(轉)Java併發編程:線程池的使用

本身彙總

相關文章
相關標籤/搜索