概括的解釋下線程的幾種可用狀態(tài)。
線程在執(zhí)行過程中,可以處于下面幾種狀態(tài):
就緒(Runnable):線程準(zhǔn)備運(yùn)行,不一定立馬就能開始執(zhí)行。
運(yùn)行中(Running):進(jìn)程正在執(zhí)行線程的代碼。
等待中(Waiting):線程處于阻塞的狀態(tài),等待外部的處理結(jié)束。睡眠中
(Sleeping):線程被強(qiáng)制睡眠。
I/O阻塞(BlockedonI/O):等待I/O操作完成。
同步阻塞(BlockedonSynchronization):等待獲取鎖。
死亡(Dead):線程完成了執(zhí)行。
同步方法和同步代碼塊的區(qū)別是什么?
在Java語言中,每一個(gè)對象有一把鎖。線程可以使用synchronized關(guān)鍵字來獲取對象上的
鎖。
synchronized關(guān)鍵字可應(yīng)用在方法級別(粗粒度鎖)或者是代碼塊級別(細(xì)粒度鎖)。
在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級別的同步?
監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一
個(gè)線程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許
執(zhí)行同步代碼。
什么是死鎖(deadlock)?
兩個(gè)進(jìn)程都在等待對方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程
都陷入了無限的等待中。
如何確保N個(gè)線程可以訪問N個(gè)資源同時(shí)又不導(dǎo)致死鎖?
使用多線程的時(shí)候,一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線程
按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現(xiàn)死鎖了。
Java集合類
Java集合類框架的基本接口有哪些?
Java集合類提供了一套設(shè)計(jì)良好的支持對一組對象進(jìn)行操作的接口和類。Java集合類里面最
基本的接口有:
Collection:代表一組對象,每一個(gè)對象都是它的子元素。
Set:不包含重復(fù)元素的Collection。
List:有順序的collection,并且可以包含重復(fù)元素。
Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復(fù)。
為什么集合類沒有實(shí)現(xiàn)Cloneable和Serializable接口?
集合類接口指定了一組叫做元素的對象。集合類接口的每一種具體的實(shí)現(xiàn)類都可以選擇以它
自己的方式對元素進(jìn)行保存和排序。有的集合類允許重復(fù)的鍵,有些不允許。
什么是迭代器(Iterator)?
Iterator接口提供了很多對集合元素進(jìn)行迭代的方法。每一個(gè)集合類都包含了可以返回迭代
器實(shí)例的迭代方法。迭代器可以在迭代的過程中刪除底層集合的元素。
克隆(cloning)或者是序列化(serialization)的語義和含義是跟具體的實(shí)現(xiàn)相關(guān)的。因此,應(yīng)該由
集合類的具體實(shí)現(xiàn)來決定如何被克隆或者是序列化。
Iterator和ListIterator的區(qū)別是什么?
下面列出了他們的區(qū)別:
Iterator可用來遍歷Set和List集合,但是ListIterator只能用來遍歷List。
Iterator對集合只能是前向遍歷,ListIterator既可以前向也可以后向。
ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替換元素,獲取前
一個(gè)和后一個(gè)元素的索引,等等。
以上就是天津卓眾教育java培訓(xùn)機(jī)構(gòu)的小編針對“硬核干活,Java中常見面試題目”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java面試題