bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

java經(jīng)典面試題集錦(五)

一、什么是線程同步、異步?

白銀區(qū)網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

(更多面試題推薦:java面試題)

同步(synchronous)就是協(xié)同步調(diào),按預(yù)定的先后次序進(jìn)行運(yùn)行。

異步就是和同步相對(duì),不阻塞,同時(shí)運(yùn)行。

二、什么是線程不安全?如何解決?(重點(diǎn))

什么叫線程安全?

如果你的代碼所在的進(jìn)程中有多個(gè)線程在同時(shí)運(yùn)行,而這些線程可能會(huì)同時(shí)運(yùn)行這段代碼。如果每次運(yùn)行結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期的是一樣的,就是線程安全的。

或者說:一個(gè)類或者程序所提供的接口對(duì)于線程來(lái)說是原子操作或者多個(gè)線程之間的切換不會(huì)導(dǎo)致該接口的執(zhí)行結(jié)果存在二義性,也就是說我們不用考慮同步的問題。

線程安全問題都是由全局變量及靜態(tài)變量引起的。

若每個(gè)線程中對(duì)全局變量、靜態(tài)變量只有讀操作,而無(wú)寫操作,一般來(lái)說,這個(gè)全局變量是線程安全的;若有多個(gè)線程同時(shí)執(zhí)行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。

(相關(guān)教程推薦:java入門程序)

為什么ArrayList線程不安全?不安全為什么要使用?如何解決線程不安全?

一個(gè) ArrayList ,在添加一個(gè)元素的時(shí)候,它可能會(huì)有兩步來(lái)完成:

1、在 Items[Size] 的位置存放此元素;

2、增大 Size 的值。

在單線程運(yùn)行的情況下,如果 Size = 0,添加一個(gè)元素后,此元素在位置 0,而且 Size=1;而如果是在多線程情況下,比如有兩個(gè)線程,線程 A 先將元素存放在位置 0。

但是此時(shí) CPU 調(diào)度線程A暫停,線程 B 得到運(yùn)行的機(jī)會(huì)。線程B也向此 ArrayList 添加元素,因?yàn)榇藭r(shí) Size 仍然等于 0 (注意哦,我們假設(shè)的是添加一個(gè)元素是要兩個(gè)步驟哦,而線程A僅僅完成了步驟1),所以線程B也將元素存放在位置0。然后線程A和線程B都繼續(xù)運(yùn)行,都增加 Size 的值。

那好,現(xiàn)在我們來(lái)看看 ArrayList 的情況,元素實(shí)際上只有一個(gè),存放在位置 0,而 Size 卻等于 2。這就是“線程不安全”了。

如何解決?

加鎖(對(duì)象鎖、鎖代碼塊)、自旋+CAS方式(樂觀鎖)、使用java提供的線程安全的數(shù)據(jù)類

三、如何創(chuàng)建一個(gè)線程?有幾種方法?

1、繼承Thread類

2、實(shí)現(xiàn)Runnable接口

3、實(shí)現(xiàn)Callable接口

四、是使用Runnalbe接口好?還是繼承Thread類好?

實(shí)現(xiàn)Runnable接口更好一些。

1、因?yàn)閷?shí)現(xiàn)Runnable接口可以避免Java單繼承的局限性。

當(dāng)一個(gè)類繼承了Thread,就不可以在繼承其他類了。而當(dāng)一個(gè)類實(shí)現(xiàn)了Runnable,它一樣可以繼承其他類。

2、更符合面向?qū)ο蟮脑O(shè)計(jì)

run()方法的作用是用來(lái)封裝線程要運(yùn)行的代碼。那么run()方法所屬的對(duì)象,就是線程任務(wù)對(duì)象。Thread類的子類對(duì)象即使線程對(duì)象,又是線程任務(wù)對(duì)象。耦合性很強(qiáng)。

有了Runnable接口,可以將線程任務(wù)和線程進(jìn)行解耦,提高了程序的擴(kuò)展性。

(相關(guān)視頻教程推薦:java視頻教程)

五、sleep()和 wait()有什么區(qū)別?

sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,把執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。

wait是Object類的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。

如果變量被聲明為volatile,在每次訪問時(shí)都會(huì)和主存一致;如果變量在同步方法或者同步塊中 被訪問,當(dāng)在方法或者塊的入口處獲得鎖以及方法或者塊退出時(shí)釋放鎖時(shí)變量被同步。

本文題目:java經(jīng)典面試題集錦(五)
網(wǎng)頁(yè)URL:http://vcdvsql.cn/article32/chogpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、定制開發(fā)關(guān)鍵詞優(yōu)化、微信公眾號(hào)、響應(yīng)式網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化