進(jìn)程線程-java面(miàn)試
進(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ā)生死鎖了.
- 企業官網怎麼(me)就(jiù)成(chéng)了企業的擺設? (62203)
- 企業網站建設最常見誤區分析 (60391)
- 關于網站關鍵詞選擇的一些技巧 (60234)
- 論網站頁面(miàn)靜态化和僞靜态的區别 (58287)
- 熱烈祝賀香港保險網制作完成(chéng)并交付上線 (57765)