Java併發編程面試題彙總java
線程面試
線程是一個獨立執行的調用序列,同一個進程的線程在同一時刻共享一些系統資源(好比文件句柄等)也能訪問同一個進程所建立的對象資源(內存資源)。java.lang.Thread對象負責統計和控制這種行爲。算法
每一個程序都至少擁有一個線程-即做爲Java虛擬機(JVM)啓動參數運行在主類main方法的線程。在Java虛擬機初始化過程當中也可能啓動其餘的後臺線程。這種線程的數目和種類因JVM的實現而異。然而全部用戶級線程都是顯式被構造並在主線程或者是其餘用戶線程中被啓動。編程
一、在java中守護線程和本地線程區別?安全
二、線程與進程的區別?多線程
三、什麼是多線程中的上下文切換?併發
四、死鎖與活鎖的區別,死鎖與飢餓的區別?框架
五、Java中用到的線程調度算法是什麼?學習
六、什麼是線程組,爲何在Java中不推薦使用?atom
七、爲何使用Executor框架?
八、在Java中Executor和Executors的區別?
九、如何在Windows和Linux上查找哪一個線程使用的CPU時間最長?
十、什麼是原子操做?在Java Concurrency API中有哪些原子類(atomic classes)?
十一、Java Concurrency API中的Lock接口(Lock interface)是什麼?對比同步它有什麼優點?
十二、什麼是Executors框架?
1三、什麼是阻塞隊列?阻塞隊列的實現原理是什麼?如何使用阻塞隊列來實現生產者-消費者模型?
1四、什麼是Callable和Future?
1五、什麼是FutureTask?使用ExecutorService啓動任務。
1六、什麼是併發容器的實現?
1七、多線程同步和互斥有幾種實現方法,都是什麼?
1八、什麼是競爭條件?你怎樣發現和解決競爭?
附:java併發編程學習導圖
須要面試題彙總以及高清腦圖(可入圈:830478757,進羣便可免費領取)
1九、你將如何使用thread dump?你將如何分析Thread dump?
20、爲何咱們調用start()方法時會執行run()方法,爲何咱們不能直接調用run()方法?
2一、Java中你怎樣喚醒一個阻塞的線程?
2二、在Java中CycliBarriar和CountdownLatch有什麼區別?
2三、什麼是不可變對象,它對寫併發應用有什麼幫助?
2四、什麼是多線程中的上下文切換?
2五、Java中用到的線程調度算法是什麼?
2六、什麼是線程組,爲何在Java中不推薦使用?
2七、爲何使用Executor框架比使用應用建立和管理線程好?
2八、java中有幾種方法能夠實現一個線程?
2九、如何中止一個正在運行的線程?
30、notify()和notifyAll()有什麼區別?
3一、什麼是Daemon線程?它有什麼意義?
3二、java如何實現多線程之間的通信和協做?
3三、什麼是可重入鎖(ReentrantLock)?
3四、當一個線程進入某個對象的一個synchronized的實例方法後,其它線程是否可進入此對象的其它方法?
3五、樂觀鎖和悲觀鎖的理解及如何實現,有哪些實現方式?
3六、SynchronizedMap和ConcurrentHashMap有什麼區別?
3七、CopyOnWriteArrayList能夠用於什麼應用場景?
3八、什麼叫線程安全?servlet是線程安全嗎?
3九、volatile有什麼用?可否用一句話說明下volatile的應用場景?
40、爲何代碼會重排序?
4一、在java中wait和sleep方法的不一樣?
4三、一個線程運行時發生異常會怎樣?
4四、如何在兩個線程間共享數據?
4五、Java中notify 和 notifyAll有什麼區別?
4六、爲何wait, notify 和 notifyAll這些方法不在thread類裏面?
4七、什麼是ThreadLocal變量?
4八、Java中interrupted 和 isInterrupted方法的區別?
4九、爲何wait和notify方法要在同步塊中調用?
50、爲何你應該在循環中檢查等待條件?
5一、Java中的同步集合與併發集合有什麼區別?
5二、什麼是線程池? 爲何要使用它?
5三、怎麼檢測一個線程是否擁有鎖?
5四、你如何在Java中獲取線程堆棧?
5五、JVM中哪一個參數是用來控制線程的棧堆棧小的?
5六、Thread類中的yield方法有什麼做用?
5七、Java中ConcurrentHashMap的併發度是什麼?
5八、Java中Semaphore是什麼?
5九、Java線程池中submit() 和 execute()方法有什麼區別?
60、什麼是阻塞式方法?
6一、Java中的ReadWriteLock是什麼?
6二、volatile 變量和 atomic 變量有什麼不一樣?
6三、能夠直接調用Thread類的run ()方法麼?
6四、如何讓正在運行的線程暫停一段時間?
6五、你對線程優先級的理解是什麼?
6六、什麼是線程調度器(Thread Scheduler)和時間分片(Time Slicing )?
6七、你如何確保main()方法所在的線程是Java 程序最後結束的線程?
6八、線程之間是如何通訊的?
6九、爲何線程通訊的方法wait(), notify()和notifyAll()被定義在Object 類裏?
70、爲何wait(), notify()和notifyAll ()必須在同步方法或者同步塊中被調用?
7一、爲何Thread類的sleep()和yield ()方法是靜態的?
7二、如何確保線程安全?
7三、同步方法和同步塊,哪一個是更好的選擇?
7四、如何建立守護線程?
7五、什麼是Java Timer 類?如何建立一個有特定時間間隔的任務?
面試資料: