創(chuàng)建線(xiàn)程有幾種不同的方式?
1. 集成Thread類(lèi),重寫(xiě)run方法。一個(gè)線(xiàn)程(對(duì)象)只能夠執(zhí)行一次start()
2. 實(shí)現(xiàn)Runnable接口,并重寫(xiě)里面的run方法。需要再次用Thread類(lèi)包裝后才能調(diào)用start方法。
3. 實(shí)現(xiàn)callable接口,重寫(xiě)call方法,有返回值,并結(jié)合Future實(shí)現(xiàn)
4. 使用實(shí)現(xiàn)了Executor接口的ThreadPoolExecutor來(lái)創(chuàng)建線(xiàn)程池
你喜歡哪一種?為什么?
一般情況下,常見(jiàn)的是第二種。
Runnable接口有如下好處:
1. 避免點(diǎn)繼承的局限,一個(gè)類(lèi)可以繼承多個(gè)接口。
2. 適合于資源的共享
我們聊聊看
?、倮^承Thread類(lèi)(真正意義上的線(xiàn)程類(lèi)),是Runnable接口的實(shí)現(xiàn)。
②實(shí)現(xiàn)Runnable接口,并重寫(xiě)里面的run方法。
?、凼褂肊xecutor框架創(chuàng)建線(xiàn)程池。Executor框架是juc里提供的線(xiàn)程池的實(shí)現(xiàn)。
調(diào)用線(xiàn)程的start():?jiǎn)?dòng)此線(xiàn)程;調(diào)用相應(yīng)的run()方法
繼承于Thread類(lèi)的線(xiàn)程類(lèi),可以直接調(diào)用start方法啟動(dòng)線(xiàn)程(使用static也可以實(shí)現(xiàn)資源共享).一個(gè)線(xiàn)程(對(duì)象)只能夠執(zhí)行一次start(),而且不能通過(guò)Thread實(shí)現(xiàn)類(lèi)對(duì)象的run()去啟動(dòng)一個(gè)線(xiàn)程。
實(shí)現(xiàn)Runnable接口的類(lèi)需要再次用Thread類(lèi)包裝后才能調(diào)用start方法。(三個(gè)Thread對(duì)象包裝一個(gè)類(lèi)對(duì)象,就實(shí)現(xiàn)了資源共享)。
線(xiàn)程的使用的話(huà),注意鎖和同步的使用。(多線(xiàn)程訪(fǎng)問(wèn)共享資源容易出現(xiàn)線(xiàn)程安全問(wèn)題)
一般情況下,常見(jiàn)的是第二種。
Runnable接口有如下好處:
?、俦苊恻c(diǎn)繼承的局限,一個(gè)類(lèi)可以繼承多個(gè)接口。
?、谶m合于資源的共享
Thread的常用方法:
1.start():?jiǎn)?dòng)線(xiàn)程并執(zhí)行相應(yīng)的run()方法
2.run():子線(xiàn)程要執(zhí)行的代碼放入run()方法中
3.currentThread():靜態(tài)的,調(diào)取當(dāng)前的線(xiàn)程
4.getName():獲取此線(xiàn)程的名字
5.setName():設(shè)置此線(xiàn)程的名字
6.yield():調(diào)用此方法的線(xiàn)程釋放當(dāng)前CPU的執(zhí)行權(quán)(很可能自己再次搶到資源)
7.join():在A(yíng)線(xiàn)程中調(diào)用B線(xiàn)程的join()方法,表示:當(dāng)執(zhí)行到此方法,A線(xiàn)程停止執(zhí)行,直至B線(xiàn)程執(zhí)行完畢,
A線(xiàn)程再接著join()之后的代碼執(zhí)行
8.isAlive():判斷當(dāng)前線(xiàn)程是否還存活
9.sleep(long l):顯式的讓當(dāng)前線(xiàn)程睡眠l毫秒 (只能捕獲異常,因?yàn)楦割?lèi)run方法沒(méi)有拋異常)
10.線(xiàn)程通信(方法在Object類(lèi)中):wait() notify() notifyAll()
設(shè)置線(xiàn)程的優(yōu)先級(jí)(非絕對(duì),只是相對(duì)幾率大些)
getPriority():返回線(xiàn)程優(yōu)先值
setPriority(int newPriority):改變線(xiàn)程的優(yōu)先級(jí)
更多關(guān)于“Java培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線(xiàn)名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專(zhuān)業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助理你實(shí)現(xiàn)java程序員夢(mèng)想。