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