国产最新a级毛片无码专区_综合亚洲欧美日韩久久精品_日本成年片在线观看66_一本到九九av电影_一级毛片免费网站播放_国内精品久久人无码大片_国产人成视频99在线观看_欧美不卡在线一本二本_国产亚洲电影av_可以免费看黄色软件

知ing

Java程序設(shè)計實用教程(第三版)

葉核亞 編 / 電子工業(yè)出版社

? ? ? 上傳

查看本書

第7章多線程

7.1什么是進程?什么是線程?進程與線程的關(guān)系是怎樣的?

【答】進程:進程是一個可并發(fā)的具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次執(zhí)行過程,也是操作系統(tǒng)進行資源分配和保護的基本單位。

線程:線程是操作系統(tǒng)進程中能夠獨立執(zhí)行的實體,是處理器調(diào)度和分派的基本單位。線程是進程的組成部分,每個進程內(nèi)允許包含多個并發(fā)執(zhí)行的線程。


7.2操作系統(tǒng)為什么要支持多線程技術(shù)?

【答】操作系統(tǒng)采用進程機制能夠減少程序并發(fā)時所付出的時空開銷,使得并發(fā)粒度更細,并發(fā)性更好,提高了資源使用率和系統(tǒng)效率。


7.3Java為什么要支持線程?什么場合需要使用多線程程序設(shè)計?

【答】支持多線程能充分發(fā)揮硬件的并發(fā)性,消除處理器和I/O設(shè)備的互等現(xiàn)象,提高系統(tǒng)效率。一般一下場合需要使用多線程:

????1、程序包好復(fù)雜的計算任務(wù)時,主要是利用多線程獲取更所得CPU時間。

????2、處理速度較慢的外圍設(shè)備。

????3、程序設(shè)計自身的需要。


7.4Java提供了哪些接口和類實現(xiàn)多線程機制?

【答】Java主要提供了java.lang.Runnable接口和Thread線程類來實現(xiàn)多線程機制。


7.5一個線程對象的生命周期有哪幾種狀態(tài)構(gòu)成?各狀態(tài)之間是如何變化的?

【答】

線程對象的生命周期主要包括:新建態(tài)、就緒態(tài)和運行態(tài)、阻塞態(tài)和等待態(tài)、終止態(tài)。新建態(tài)通過start()方法是線程成為運行態(tài),當運行態(tài)遇到sleep()或wait()方法時就進入等待態(tài),而當sleep()時間到或通過notify()方法線程就又進入了運行態(tài);當運行態(tài)遇到synchronized()方法時就進入阻塞態(tài),當線程獲得互斥鎖使用權(quán)時就又到了運行態(tài);當線程的run()方法結(jié)束時整個線程就進入了終止態(tài),整個線程結(jié)束。


7.6Java提供了哪些方法能夠改變線程狀態(tài)?程序中能夠調(diào)度線程立即執(zhí)行嗎?

【答】Java中提供了start()方法來啟動已創(chuàng)建的線程對象;sleep()方法使當前線程睡眠若干毫秒,線程有運行態(tài)進入等待態(tài),但是不交出臨界區(qū)的鎖;yield()方法暫停當前線程的執(zhí)行,允許其他線程競爭CPU;stop()方法來結(jié)束一個線程;wait()方法將本線程設(shè)為等待態(tài);notify()方法來喚醒當前處于等待態(tài)的線程;interrupt()方法改變當前線程的中斷狀態(tài),但是當前線程還可以繼續(xù)執(zhí)行。


7.7什么是線程的優(yōu)先級?設(shè)置線程優(yōu)先級有什么作用?

【答】每個線程被執(zhí)行的優(yōu)先順序即為線程的優(yōu)先級,默認優(yōu)先級為5。當創(chuàng)建了多個線程并要執(zhí)行這些線程時,操作系統(tǒng)不知到底該執(zhí)行哪個線程,當設(shè)置好優(yōu)先級后,程序首先會執(zhí)行優(yōu)先級最高的線程,然后依次執(zhí)行下去。這樣處理器將會合理而且充實的額被利用,不會造成資源的浪費或者運行的混亂。


7.8線程按什么規(guī)則排隊等待?

【答】線程按優(yōu)先級排隊,線程調(diào)度語句優(yōu)先級基礎(chǔ)上的“先到先服務(wù)”原則


7.9多線程間共享數(shù)據(jù)時會發(fā)生怎樣的并發(fā)執(zhí)行錯誤?

【答】當幾個線程共享數(shù)據(jù)時,一個線程的執(zhí)行可能影響其他線程的執(zhí)行結(jié)果,并導(dǎo)致錯誤的程序運行結(jié)果。


7.10在什么情況下需要采用線程同步機制?

【答】當并發(fā)執(zhí)行的多個線程間需要共享資源或交換數(shù)據(jù)時,各個線程執(zhí)行時相互之間會干擾或影響其他線程的執(zhí)行結(jié)果,這時就需要采用線程同步機制。


7.11關(guān)鍵字synchronized是什么含義?為什么wait()和notify()方法要與synchronized同時使用?

【答】synchronized用于聲明一段程序為臨界區(qū),使線程對臨界資源采用互斥使用方式。

wait()和notify()不是屬于線程類,而是每一個對象都具有的方法,而且這兩個方法都和對象鎖有關(guān),有鎖的地方必有synchronized()方法,故wait()和notify()方法要與synchronized同時使用。


7.12明sleep()和wait()方法的異同。

【答】wait是Object類的方法,sleep與yield都是Thread類的方法。wait調(diào)用的時候需要注意的是該方法是釋放鎖標志的,而sleep在調(diào)用的時候是緊緊抱著鎖標志的,也就是等他完全執(zhí)行完成了才可以讓其他線程來訪問的

sleep方法使當前運行中的線程睡眼一段時間,進入不可運行狀態(tài),這段時間的長短是由程序設(shè)定的,yield方法使當前線程讓出CPU占有權(quán),但讓出的時間是不可設(shè)定的。


7.13一個對象為什么需要調(diào)用wait()方法使當前線程等待?

【答】wait()使當前線程進入停滯狀態(tài)時,還會釋放當前線程所占有的“鎖標志”,從而使線程所在對象中的其它synchronized數(shù)據(jù)可被別的線程使用。當調(diào)用sleep()方法時,該線程不會釋放當前線程所占有的“鎖標志”。


7.14什么是死鎖?什么情況下會死鎖?

【答】由于資源占用是互斥的,當某個進程提出申請資源后,使得有關(guān)進程在無外力協(xié)助下,永遠分配不到必需的資源而無法繼續(xù)運行,這就產(chǎn)生了一種特殊現(xiàn)象死鎖。

當多個線程同時被阻塞,他們中的一個或者全部都在等待某個資源被釋放,由于線程被無限期地阻塞,因此程序處于非正常終止,才會產(chǎn)生死鎖。


查看更多