1形导、繼承Thread類扫茅,重寫run方法實現(xiàn)多線程
創(chuàng)建Thread子類的實例對象琐凭,即創(chuàng)建了線程對象暂衡。
run()方法內即為該線程要執(zhí)行代碼塊询微。
調用線程對象的start()方法來啟動該線程。
2狂巢、?實現(xiàn)runnable接口撑毛,實現(xiàn)run()方法實現(xiàn)多線程
繼承Runnable接口,實現(xiàn)run()方法唧领,實現(xiàn)的run()方法內即為該線程要執(zhí)行代碼塊藻雌。
創(chuàng)建runnable實現(xiàn)類實例對象,將該對象作為Thread的參數創(chuàng)建Thread對象斩个。
該Thread對象即為真正的線程對象胯杭。
3、通過使用Callable接口和FutureTask實現(xiàn)類實現(xiàn)多線程
繼承Callable接口受啥,實現(xiàn)call()方法做个,內即為該線程要執(zhí)行代碼塊,并且?guī)в蟹祷刂怠?/p>
創(chuàng)建Callable實現(xiàn)類的實例,使用FutureTask類將Callable對象包裝叁温,并包裝了call()方法返回值再悼。
將FutureTask對象作為Thread的參數創(chuàng)建Thread對象。使用FutureTask中的get()方法獲取返回值膝但。
三種方法對比
繼承Thread類:編寫簡單冲九,直接使用this即可獲得當前線程。但是Java是單繼承所以不能不能再繼承其他父類了跟束。
實現(xiàn)runnable接口:線程類只是實現(xiàn)了Runnable接口或Callable接口莺奸,還可以繼承其他類。并且多個線程可以共享同一個target對象冀宴,非常適合多個相同線程來處理同一份資源的情況灭贷,可以更好的體現(xiàn)共享的概念。但是編程稍微要復雜一點略贮,而且如果要訪問當前線程甚疟,則必須使用Thread.currentThread()方法。
實現(xiàn)Callable接口和FutureTask實現(xiàn)類:大體和runnable接口類似逃延,需要有返回值的情況使用览妖。
注意:除了以上三種方法,還可以通過線程池創(chuàng)建線程揽祥,下次再單獨細講讽膏。