年會面試準備之Java併發程式設計——執行緒
Java併發程式設計面試題彙總
執行緒
執行緒是一個獨立執行的呼叫序列,同一個程序的執行緒在同一時刻共享一些系統資源(比如檔案控制代碼等)也能訪問同一個程序所建立的物件資源(記憶體資源)。java.lang.Thread物件負責統計和控制這種行為。
每個程式都至少擁有一個執行緒-即作為Java虛擬機器(JVM)啟動引數執行在主類main方法的執行緒。在Java虛擬機器初始化過程中也可能啟動其他的後臺執行緒。這種執行緒的數目和種類因JVM的實現而異。然而所有使用者級執行緒都是顯式被構造並在主執行緒或者是其他使用者執行緒中被啟動。

1、在java中守護執行緒和本地執行緒區別?
2、執行緒與程序的區別?
3、什麼是多執行緒中的上下文切換?
4、死鎖與活鎖的區別,死鎖與飢餓的區別?
5、Java中用到的執行緒排程演算法是什麼?
6、什麼是執行緒組,為什麼在Java中不推薦使用?
7、為什麼使用Executor框架?
8、在Java中Executor和Executors的區別?
9、如何在Windows和Linux上查詢哪個執行緒使用的CPU時間最長?
10、什麼是原子操作?在Java Concurrency API中有哪些原子類(atomic classes)?
11、Java Concurrency API中的Lock介面(Lock interface)是什麼?對比同步它有什麼優勢?
12、什麼是Executors框架?
13、什麼是阻塞佇列?阻塞佇列的實現原理是什麼?如何使用阻塞佇列來實現生產者-消費者模型?
14、什麼是Callable和Future?
15、什麼是FutureTask?使用ExecutorService啟動任務。
16、什麼是併發容器的實現?
17、多執行緒同步和互斥有幾種實現方法,都是什麼?
18、什麼是競爭條件?你怎樣發現和解決競爭?
附:java併發程式設計學習導圖

19、你將如何使用thread dump?你將如何分析Thread dump?
20、為什麼我們呼叫start()方法時會執行run()方法,為什麼我們不能直接呼叫run()方法?
21、Java中你怎樣喚醒一個阻塞的執行緒?
22、在Java中CycliBarriar和CountdownLatch有什麼區別?
23、什麼是不可變物件,它對寫併發應用有什麼幫助?
24、什麼是多執行緒中的上下文切換?
25、Java中用到的執行緒排程演算法是什麼?
26、什麼是執行緒組,為什麼在Java中不推薦使用?
27、為什麼使用Executor框架比使用應用建立和管理執行緒好?
28、java中有幾種方法可以實現一個執行緒?
29、如何停止一個正在執行的執行緒?
30、notify()和notifyAll()有什麼區別?
31、什麼是Daemon執行緒?它有什麼意義?
32、java如何實現多執行緒之間的通訊和協作?
33、什麼是可重入鎖(ReentrantLock)?
34、當一個執行緒進入某個物件的一個synchronized的例項方法後,其它執行緒是否可進入此物件的其它方法?
35、樂觀鎖和悲觀鎖的理解及如何實現,有哪些實現方式?
36、SynchronizedMap和ConcurrentHashMap有什麼區別?
37、CopyOnWriteArrayList可以用於什麼應用場景?
38、什麼叫執行緒安全?servlet是執行緒安全嗎?
39、volatile有什麼用?能否用一句話說明下volatile的應用場景?
40、為什麼程式碼會重排序?
41、在java中wait和sleep方法的不同?
43、一個執行緒執行時發生異常會怎樣?
44、如何在兩個執行緒間共享資料?
45、Java中notify 和 notifyAll有什麼區別?
46、為什麼wait, notify 和 notifyAll這些方法不在thread類裡面?
47、什麼是ThreadLocal變數?
48、Java中interrupted 和 isInterrupted方法的區別?
49、為什麼wait和notify方法要在同步塊中呼叫?
50、為什麼你應該在迴圈中檢查等待條件?
51、Java中的同步集合與併發集合有什麼區別?
52、什麼是執行緒池? 為什麼要使用它?
53、怎麼檢測一個執行緒是否擁有鎖?
54、你如何在Java中獲取執行緒堆疊?
55、JVM中哪個引數是用來控制執行緒的棧堆疊小的?
56、Thread類中的yield方法有什麼作用?
57、Java中ConcurrentHashMap的併發度是什麼?
58、Java中Semaphore是什麼?
59、Java執行緒池中submit() 和 execute()方法有什麼區別?
60、什麼是阻塞式方法?
61、Java中的ReadWriteLock是什麼?
62、volatile 變數和 atomic 變數有什麼不同?
63、可以直接呼叫Thread類的run ()方法麼?
64、如何讓正在執行的執行緒暫停一段時間?
65、你對執行緒優先順序的理解是什麼?
66、什麼是執行緒排程器(Thread Scheduler)和時間分片(Time Slicing )?
67、你如何確保main()方法所在的執行緒是Java 程式最後結束的執行緒?
68、執行緒之間是如何通訊的?
69、為什麼執行緒通訊的方法wait(), notify()和notifyAll()被定義在Object 類裡?
70、為什麼wait(), notify()和notifyAll ()必須在同步方法或者同步塊中被呼叫?
71、為什麼Thread類的sleep()和yield ()方法是靜態的?
72、如何確保執行緒安全?
73、同步方法和同步塊,哪個是更好的選擇?
74、如何建立守護執行緒?
75、什麼是Java Timer 類?如何建立一個有特定時間間隔的任務?
面試資料:

需要面試題彙總(可私信我免費領取答案)私信【面試資料】即可領取
附加java開發的資料(面試資源與經驗總結,Dubbo、Redis、設計模式、Netty、zookeeper、Spring cloud、分散式、高併發等架構技術視訊教程資料,架構思維導圖,以及面試資料,瞭解最新的學習動態;瞭解最新的阿里、京東招聘資訊)