進(jìn)程線程-java面(miàn)試

Time:2021/06/11 11:28:17   Click:

進(jìn)程與線程的區别 ?進(jìn)程是一個程序的執行(即正在運行的程序), 然而線程是在進(jìn)程中獨立的執行序列. 一個進(jìn)程可以包含很多線程. 線程有時(shí)被(bèi)稱爲輕量級的進(jìn)程.


說(shuō)下創建線程的不同方式. 你傾向(xiàng)于哪種(zhǒng)方式并說(shuō)明原因 ?

有三種(zhǒng)創建線程的方式:


繼承Thread類.

實現Runnable接口.

通過(guò)Executor框架創建線程池.


首選方式是實現Runnable接口, 因爲它不需要繼承Thread類. 當你的程序設計需要多繼承時(shí), 使用接口會(huì)有所幫助. 另外, 線程池效率是很高的, 并且實施起(qǐ)來也很簡單.


解釋下可用的線程狀态.

在執行期間, 線程會(huì)處于以下狀态中的一種(zhǒng):


Runnable: 線程已準備就(jiù)緒, 但沒(méi)有立即運行.

Running: 處理器正在執行的線程代碼.

Waiting: 處于阻塞狀态的線程, 等待外部某種(zhǒng)處理的結束.

Sleeping: 被(bèi)強制休眠的線程.

Blocked on I/O: 等待I/O操作的完成(chéng).

Blocked on Synchronization: 等待取得線程鎖.

Dead: 線程已經(jīng)執行結束.


同步方法與同步塊的區别 ?

在Java程序中, 每個對(duì)象都(dōu)擁有一個鎖. 線程可以通過(guò)使用synchronized關鍵字來獲取一個對(duì)象上的鎖. synchronized關鍵字可以用于方法級别(粗粒度鎖)或代碼塊級别(細粒度鎖).


在監視器中的線程同步是怎樣(yàng)發(fā)生的? 你可以使用哪些級别的同步 ?

JVM使用結合了監視器的鎖. 監視器是一個守護者, 它看管一個同步代碼的序列, 并且确保在一個時(shí)刻隻能(néng)有一個線程執行同步代碼片段. 每個監視器關聯著(zhe)一個對(duì)象引用. 隻能(néng)得到鎖的線程才可以執行同步代碼.


什麼(me)是死鎖 ?

當兩(liǎng)個進(jìn)程相互等待對(duì)方執行完畢時(shí), 其結果是它們會(huì)永遠等待下去.

怎樣(yàng)确保N個線程訪問N個資源時(shí)不會(huì)發(fā)生死鎖 ?

使用N個線程時(shí)一個非常簡單的避免死鎖的方法是爲所有的鎖排序, 并強制每個線程也按那種(zhǒng)方式排序. 這(zhè)樣(yàng), 如果所有線程以相同的順序鎖定和解鎖互斥資源就(jiù)不會(huì)發(fā)生死鎖了.


TOP

錦江區聚格樂享網絡工作室@2012 版權所有
蜀ICP備12016524号-2

立即咨詢
成(chéng)都(dōu)網站建設,成(chéng)都(dōu)做網站,錦江區聚格樂享網絡工作室
40f13d50b73e104f832ed1b719ae6935