java面試你在工作中如何創(chuàng)建線程 Java從業(yè)人員面試過程中如何利用專業(yè)知識吊打面試官?
Java從業(yè)人員面試過程中如何利用專業(yè)知識吊打面試官?基礎:Java基礎,集合,多線程,反射,對象復制,Java Web,異常模塊,網(wǎng)絡模塊。架構:Spring (Spring MVC Spring
Java從業(yè)人員面試過程中如何利用專業(yè)知識吊打面試官?
基礎:Java基礎,集合,多線程,反射,對象復制,Java Web,異常模塊,網(wǎng)絡模塊。
架構:Spring (Spring MVC Spring Boot春云),Hibernate,Mybatis,RabbitMQKafkaZookeeper,設計模式。
數(shù)據(jù)庫:Mysql,Redis
虛擬機(Java Virtual Machin
在Java面試中如何回答好關于volatile的問題?
Volatil
java線程間如何通信?
這個題目太寬泛了,可以就這個題目寫一本書,比如《JAVA并發(fā)編程實踐》,甚至一本書都不夠。限于篇幅,我從線程的抽象任務和線程的實際形式兩個角度來講。
任務抽象線程是對CPU資源的抽象,可以映射成一個可執(zhí)行的任務。從操作系統(tǒng)的多通道編程到多線程設計,其實就是多任務模型的開發(fā),不斷簡化建模和設計的難度,充分利用CPU資源。
任務需要操作資源,主要包括內(nèi)存數(shù)據(jù)和來自各種IO設備的數(shù)據(jù)。
不同的任務需要協(xié)作:任務執(zhí)行順序的控制、資源訪問的同步、任務間的通信等。
線程通信線程主要可以看作是運行時的一個指令執(zhí)行序列和相關內(nèi)存信息(內(nèi)核態(tài)和用戶態(tài),包括棧、TLS、內(nèi)核對象和運行時設計的相關對象)。
如果兩個線程位于同一個進程中,就相當于進程間的IPC。
我一般從信息交換和操作同步兩個方面來看線程通信。
第一,信息交換,本質上是兩個線程可以通過一個公共區(qū)域交換消息。這個公共區(qū)域對應的原始資源包括寄存器、內(nèi)存、各種IO設備等。
用Java開發(fā)時,進程中的兩個線程可以通過使用可公開訪問的對象直接交換信息。不同的進程,如IPC機制,共享內(nèi)存、文件系統(tǒng)、流水線、網(wǎng)絡協(xié)議實現(xiàn)組件等。,都有最基本的類庫實現(xiàn)。
第二,操作同步
同步的關鍵是鎖,鎖的核心是原子性,死鎖是最重要的問題。
Java中可用的鎖包括以下幾種:
首先是CAS接口,在包下。這一點非常重要。你要實現(xiàn)非阻塞鎖,要應用自如。無鎖模式也是處理高并發(fā)最理想的。這個函數(shù)本質上是CPU提供的一種基本類型的原子操作。下面顯示器的無鎖模式也是由CAS實現(xiàn)的。
其次,虛擬機封裝的監(jiān)控機制使用對象鎖來實現(xiàn)互斥和協(xié)作。當你用synchronized修飾實例方法、靜態(tài)方法和代碼塊,或者調(diào)用對象的wait、notify和notifyall時,你是在使用虛擬機提供的ObjectMonitor的功能,立足點是操作系統(tǒng)提供的信號量。只要系統(tǒng)調(diào)用使用內(nèi)核對象,鎖就會變得更重。如果關注性能,可以嘗試深入了解它在無鎖狀態(tài)、偏鎖、輕量級鎖、重量級鎖之間的升降級。
最后是大量的模式設計(比如生產(chǎn)者和消費者隊列)和通用數(shù)據(jù)結構的同步,主要提供編程的便利。我們可以關注AbstractQueuedSynchronizer類的實現(xiàn)。核心點是最終傳遞的synchronized標記在ObjectMonitor中結束。Semaphore和ReentrantLock也是基于它實現(xiàn)的,官方Api文檔也給出了一個基于AbstractQueuedSynchronizer實現(xiàn)新的例子。