1、實現(xiàn)Runnable接口創(chuàng)建線程
由于Java是單繼承機制,如果自己的類已經(jīng)繼承自另一個類,則無法再直接繼承Thread類,此時,可以通過實現(xiàn)Runnable接口來實現(xiàn)多線程。
實現(xiàn)Runnable接口并實現(xiàn)其中的run方法,然后通過構(gòu)造Thread實例,傳入Runnable實現(xiàn)類,然后調(diào)用Thread的start方法即可開啟一個新線程。
2、繼承Thread類創(chuàng)建線程
Thread類本質(zhì)上也是實現(xiàn)了Runnable接口的一個實例,代表一個線程的實例。啟動線程的唯一方法就是通過Thread類的start()實例方法。
start()方法是一個native方法,它將啟動一個新線程,并執(zhí)行run()方法。這種方式實現(xiàn)多線程比較簡單,通過繼承Thread類并復(fù)寫run()方法,就可以啟動新線程并執(zhí)行自己定義的run()方法。
3、使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的線程(線程池方式)
ExecutorService、Callable、Future三個接口都是屬于Executor框架。可返回值的任務(wù)必須實現(xiàn)Callable接口。通過ExecutorService執(zhí)行Callable任務(wù)后,可以獲取到一個Future的對象,在該對象上調(diào)用get()就可以獲取到Callable任務(wù)返回的結(jié)果了。
4、實現(xiàn)Callable接口通過FutureTask包裝器來創(chuàng)建Thread線程
首先需要一個實現(xiàn)Callable接口的實例,然后實現(xiàn)該接口的唯一方法call邏輯,接著把Callable實例包裝成FutureTask傳遞給Thread實例啟動新線程。
FutureTask本質(zhì)上也實現(xiàn)了Runnable接口,所以同樣可以用來構(gòu)造Thread實例。
以上就是四種實現(xiàn)java多線程方式介紹的內(nèi)容。