線程的啟動(dòng)方式以及SingleThreadExecutor

啟動(dòng)線程方式一: 線程可以驅(qū)動(dòng)任務(wù),因此需要一種描述任務(wù)的方式,可以由Runnable接口來(lái)提供,要想定義任務(wù),只需要實(shí)現(xiàn)Runnable接口并編寫run()方法,使得該任務(wù)執(zhí)行你的命令.

private static class LiftOff implements Runnable{

private int count = 10000;

@Override

public void run() {

while(count-- > 0){

System.out.println("count :"+count);

Thread.yield();

}

public static void main(String[] args) {

LiftOff liftOff = new LiftOff();

liftOff.run();

}

啟動(dòng)線程方式二: 將Runnable對(duì)象轉(zhuǎn)變?yōu)楣ぷ魅蝿?wù)的傳統(tǒng)方式是把它提交給一個(gè)Thread構(gòu)造器,Thread構(gòu)造器只需要一個(gè)Runnable對(duì)象,然后調(diào)用start方法就可以啟動(dòng)

Thread t = new Thread(new LiftOff());

t.start();

啟動(dòng)線程方式三:使用Executor,創(chuàng)建線程池對(duì)象, 即ExecutorService 對(duì)象,然后調(diào)用exec()方法,

ExecutorService exec = Executors.newCachedThreadPool();

for(int i = 0; i < 5; i++)

exec.execute(new LiftOff());

exec.shutdown();

詳細(xì)介紹第三種方式,Executor的三個(gè)方法:

1,newFixedThreadPool

2,newSingleThreadExecutor

3,newCachedThreadPool

如果向SingleThreadExecutor提交了多個(gè)任務(wù),那么這些任務(wù)將排隊(duì),每個(gè)任務(wù)都會(huì)在下一個(gè)任務(wù)開始之前運(yùn)行結(jié)束,所有的任務(wù)將使用相同的線程,下面的實(shí)例中,SingleThreadExecutor會(huì)序列化所有提交給它的任務(wù),并會(huì)維護(hù)它自己的任務(wù)隊(duì)列。

ExecutorService exec = Executors.newSingleThreadExecutor();

for(int i = 0; i < 5; i++)

exec.execute(new LiftOff());

exec.shutdown();

另外應(yīng)用場(chǎng)景:假設(shè)你有大量的線程,那他們運(yùn)行的任務(wù)將使用文件系統(tǒng),你可以用SingleThreadExecutor來(lái)運(yùn)行這些線程,以確保任意時(shí)刻在任務(wù)線程中都只有唯一的任務(wù)在運(yùn)行,在這種方式中,你不需要在共享資源上處理同步,同時(shí)不會(huì)過(guò)度使用文件系統(tǒng),有時(shí)更好的解決方案是在資源上同步,但是SingleThreadExecutor可以讓你省去只是為了維持某些原型而進(jìn)行的各種協(xié)調(diào)努力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前段時(shí)間遇到這樣一個(gè)問(wèn)題,有人問(wèn)微信朋友圈的上傳圖片的功能怎么做才能讓用戶的等待時(shí)間較短,比如說(shuō)一下上傳9張圖片,...
    加油碼農(nóng)閱讀 1,285評(píng)論 0 2
  • 1、new Thread的弊端 執(zhí)行一個(gè)異步任務(wù)你還只是如下new Thread嗎? ``` new Thread...
    Jannonx閱讀 2,801評(píng)論 0 6
  • 一.線程與進(jìn)程相關(guān) 1.進(jìn)程 ??定義:進(jìn)程是具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是操作系統(tǒng)分...
    Geeks_Liu閱讀 1,804評(píng)論 2 4
  • 1、線程安全與鎖 線程安全的本質(zhì),在于 存在了共享的可變狀態(tài) status, 在多線程共同操作狀態(tài)變量時(shí),當(dāng)計(jì)算的...
    軒居晨風(fēng)閱讀 414評(píng)論 1 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,714評(píng)論 18 399

友情鏈接更多精彩內(nèi)容