posts - 4,comments - 30,trackbacks - 0

          1、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?

            答:有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口

            用synchronized關(guān)鍵字修飾同步方法

            反對(duì)使用stop(),是因?yàn)樗话踩K鼤?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修 改它們。結(jié)果很難檢查出真正的問(wèn)題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但卻仍然持有在這之前獲 得的鎖定。此時(shí),其他任何線程都不能訪問(wèn)鎖定的資源,除非被"掛起"的線程恢復(fù)運(yùn)行。對(duì)任何線程來(lái)說(shuō),如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖 定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該 掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。

          2、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)。

          3、同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明。

            答:如果數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。

            當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。

          4、啟動(dòng)一個(gè)線程是用run()還是start()?

            答:?jiǎn)?dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。

          5、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?

            答:不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。

          6、請(qǐng)說(shuō)出你所知道的線程同步的方法。

            答:wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。

            sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。

            notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。

            Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。

          7、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?

            答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
          同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify

          8、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系

            答:線程指在程序執(zhí)行過(guò)程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。

            Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束

          9、簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同 ?

            答:主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能

            主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。

          posted on 2007-08-30 11:38 蠻哥♂楓 閱讀(3203) 評(píng)論(4)  編輯  收藏 所屬分類: Java

          FeedBack:
          # re: java面試精品全集[線程部分][未登錄](méi)
          2008-02-25 11:37 | java
          # re: java面試精品全集[線程部分]
          2009-04-23 10:04 | landor
          很好,多謝  回復(fù)  更多評(píng)論
            
          # re: java面試精品全集[線程部分]
          2010-03-11 20:33 | yaolei
          第5題答案不對(duì)。要看另一個(gè)方法是否同步,同步鎖是什么。

          第9題:Lock有比義ynchronized更精確的線程語(yǔ)義和更好的性能。
          “更精確的線程語(yǔ)義“,這是什么意思?難道synchronized沒(méi)有精確的線程語(yǔ)義。
          至于更好的性能也要看是在什么條件下吧。  回復(fù)  更多評(píng)論
            
          # re: java面試精品全集[線程部分]
          2010-07-01 09:42 | fxbird
          wait和同步有什么關(guān)系?
          我覺(jué)得只有synchronized和同步有關(guān)系。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 洞头县| 孟津县| 曲周县| 高州市| 许昌县| 阜新| 定南县| 滦平县| 安陆市| 镇远县| 中西区| 昭苏县| 天气| 北宁市| 庆元县| 周口市| 怀集县| 岑溪市| 剑河县| 涟源市| 旌德县| 张家口市| 洛南县| 泾川县| 汨罗市| 绥棱县| 贵定县| 清水河县| 绥德县| 江都市| 长寿区| 黔南| 中西区| 丁青县| 眉山市| 左贡县| 靖宇县| 方城县| 江油市| 恭城| 东丰县|