java创建线程哪种方法最好_Java创建线程的三种方法比较
一般有三種方法,Thread,Runnable,Callable.
Runnable和Callable的區(qū)別
(1)Callable規(guī)定的方法是call(),Runnable規(guī)定的方法是run().
(2)Callable的任務(wù)執(zhí)行后可返回值,而Runnable的任務(wù)是不能返回值得
(3)call方法可以拋出異常,run方法不可以
(4)運(yùn)行Callable任務(wù)可以拿到一個(gè)Future對(duì)象,表示異步計(jì)算的結(jié)果。它提供了檢查計(jì)算是否完成的方法,以等待計(jì)算的完成,并檢索計(jì)算的結(jié)果。通過(guò)Future對(duì)象可以了解任務(wù)執(zhí)行情況,可取消任務(wù)的執(zhí)行,還可獲取執(zhí)行結(jié)果。
**通過(guò)實(shí)現(xiàn)Runnable接口來(lái)創(chuàng)建Thread線程:
步驟1:創(chuàng)建實(shí)現(xiàn)Runnable接口的類(lèi):
class SomeRunnable implements Runnable
{
public void run()
{
//do something here
}
}
步驟2:創(chuàng)建一個(gè)類(lèi)對(duì)象:
Runnable oneRunnable = new SomeRunnable();
步驟3:由Runnable創(chuàng)建一個(gè)Thread對(duì)象:
Thread oneThread = new Thread(oneRunnable);
步驟4:啟動(dòng)線程:
oneThread.start();
注釋:線程的執(zhí)行流程很簡(jiǎn)單,當(dāng)執(zhí)行代碼oneThread.start();時(shí),就會(huì)執(zhí)行oneRunnable對(duì)象中的void run();方法,該方法執(zhí)行完成后,線程就消亡了。
**通過(guò)實(shí)現(xiàn)Callable接口來(lái)創(chuàng)建Thread線程:
與方法1類(lèi)似,通過(guò)實(shí)現(xiàn)Callable接口來(lái)創(chuàng)建Thread線程:其中,Callable接口(也只有一個(gè)方法)定義如下:
Java代碼:
public interface Callable
{
V call() throws Exception;
}
步驟1:創(chuàng)建實(shí)現(xiàn)Callable接口的類(lèi)SomeCallable(略);
步驟2:創(chuàng)建一個(gè)類(lèi)對(duì)象:
Callable oneCallable = new SomeCallable();
步驟3:由Callable創(chuàng)建一個(gè)FutureTask對(duì)象:
FutureTask oneTask = new FutureTask(oneCallable);
注釋:FutureTask是一個(gè)包裝器,它通過(guò)接受Callable來(lái)創(chuàng)建,它同時(shí)實(shí)現(xiàn)了
Future和Runnable接口。
步驟4:由FutureTask創(chuàng)建一個(gè)Thread對(duì)象:
Thread oneThread = new Thread(oneTask);
步驟5:啟動(dòng)線程:
oneThread.start();
至此,一個(gè)線程就創(chuàng)建完成了。
**通過(guò)繼承Thread類(lèi)來(lái)創(chuàng)建一個(gè)線程:
步驟1:定義一個(gè)繼承Thread類(lèi)的子類(lèi):
Java代碼:
class SomeThead extends Thraad
{
public void run()
{
//do something here
}
}
步驟2:構(gòu)造子類(lèi)的一個(gè)對(duì)象:
SomeThread oneThread = new SomeThread();
步驟3:啟動(dòng)線程:
oneThread.start();
至此,一個(gè)線程就創(chuàng)建完成了。
總結(jié)
以上是生活随笔為你收集整理的java创建线程哪种方法最好_Java创建线程的三种方法比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mac wordpress php7,M
- 下一篇: 为什么用redis做缓存而不是mybat