java多線程實現(xiàn)的四種方式
java多線程實現(xiàn)的四種方式
1、繼承Thread類,重寫run方法(其實Thread類本身也實現(xiàn)了Runnable接口)
2、實現(xiàn)Runnable接口,重寫run方法
3、實現(xiàn)Callable接口,重寫call方法(有返回值)
4、使用線程池(有返回值)
1、繼承Thread類,重寫run方法
每次創(chuàng)建一個新的線程,都要新建一個Thread子類的對象
啟動線程,new Thread子類().start()
創(chuàng)建線程實際調(diào)用的是父類Thread空參的構(gòu)造器

2、實現(xiàn)Runnable接口,重寫run方法
不論創(chuàng)建多少個線程,只需要創(chuàng)建一個Runnable接口實現(xiàn)類的對象
啟動線程,new Thread(Runnable接口實現(xiàn)類的對象).start()
創(chuàng)建線程調(diào)用的是Thread類Runable類型參數(shù)的構(gòu)造器

3、實現(xiàn)Callable接口,重寫call方法(有返回值)
自定義類實現(xiàn)Callable接口時,必須指定泛型,該泛型即返回值的類型
每次創(chuàng)建一個新的線程,都要創(chuàng)建一個新的Callable接口的實現(xiàn)類、
如何啟動線程?
(1)創(chuàng)建一個Callable接口的實現(xiàn)類的對象
(2)創(chuàng)建一個FutureTask對象,傳入Callable類型的參數(shù)
????????public FutureTask(Callable<V> callable){……}
(3)調(diào)用Thread類重載的參數(shù)為Runnable的構(gòu)造器創(chuàng)建Thread對象
????????將FutureTask作為參數(shù)傳遞
????????public class FutureTask<V> implements RunnableFuture<V>
????????public interface RunnableFuture<V> extends Runnable, Future<V>
如何獲取返回值?
調(diào)用FutureTask類的get()方法

4、線程池
Executors類

