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