關(guān)于兩種方法創(chuàng)建線程的不同
學(xué)到現(xiàn)在 我有一點(diǎn)不是很明白 ? 用Runnable接口和Thread類創(chuàng)建線程貌似可以得到相同運(yùn)行結(jié)果,那到底這兩種方法有什么不同呢?或者說(shuō)用Runnable接口創(chuàng)建的線程是不是都可以用Thread來(lái)創(chuàng)建?希望有某位大神可以為我解答這個(gè)問(wèn)題
學(xué)到現(xiàn)在 我有一點(diǎn)不是很明白 ? 用Runnable接口和Thread類創(chuàng)建線程貌似可以得到相同運(yùn)行結(jié)果,那到底這兩種方法有什么不同呢?或者說(shuō)用Runnable接口創(chuàng)建的線程是不是都可以用Thread來(lái)創(chuàng)建?希望有某位大神可以為我解答這個(gè)問(wèn)題
2015-12-22
舉報(bào)
2015-12-23
第一:創(chuàng)建線程只有繼承Thread類和實(shí)現(xiàn)Runnable接口兩種方式(Thread也是實(shí)現(xiàn)了Runnable接口);
第二:若以繼承Thread類方式創(chuàng)建線程則這個(gè)類的實(shí)例就可以重寫Thread類的幾十個(gè)方法,注意是好幾十個(gè)方法;
第三:若以實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程則僅僅只有一個(gè)run()方法可供重寫;注意是只有一個(gè);
? ??實(shí)現(xiàn)Runnable接口創(chuàng)建的線程最終還是要通過(guò)將自身實(shí)例作為參數(shù)傳遞給Thread然后執(zhí)行,當(dāng)你要為一個(gè)沒(méi)有繼承Thread類的類創(chuàng)建線程,而且只想讓這個(gè)類的實(shí)例調(diào)用run方法執(zhí)行任務(wù),這時(shí)候Runnable接口就相當(dāng)于為你的目標(biāo)類提供了一個(gè)激活方式,設(shè)計(jì)該接口的目的是為了那些希望在激活時(shí)執(zhí)行代碼的對(duì)象提供一個(gè)公共協(xié)議,激活的意思是說(shuō)某個(gè)線程已啟動(dòng)并且尚未停止。?
? ?
2015-12-23
這兩種創(chuàng)建線程的方法本身沒(méi)有什么不同,一個(gè)是實(shí)現(xiàn)Runnable接口,一個(gè)是繼承Thread類。而使用實(shí)現(xiàn)Runnable接口這種方法:1.可以避免Java的單繼承的特性帶來(lái)的局限性;2.適合多個(gè)相同程序的代碼去處理同一個(gè)資源的情況,把線程同程序的代碼及數(shù)據(jù)有效分離,較好地體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想。開發(fā)中大多情況下都使用實(shí)現(xiàn)Runnable接口這種方法創(chuàng)建線程。