Java複習 建立執行緒的的幾種方式

2021-08-16 13:21:29 字數 2072 閱讀 2955

1.實現runnable介面,傳入thread

class myrunnable implements runnable

}

thread thread1 = new thread(new myrunnable());

thread1.start();

2.實現thread的run方法

class myrunnable implements runnable

}

mythread thread2 = new mythread();

thread2.start();

注:如果乙個thread既實現了自己的run方法,初始化的時候又傳入了runnable物件,後者優先

3.實現callable介面,傳入futuretask,futuretask傳給thread

class mycallable implements callable

}

futuretaskfuturetask = new futuretask<>(new mycallable());

thread thread3 = new thread(futuretask);

thread3.start();

注:callable區別於runnable在於有返回值

以下提供乙個小栗子分析runnable和callable的區別

private void executortest()  catch (executionexception e)  catch (interruptedexception e) 

}private void addrunnable(executorservice service) throws executionexception, interruptedexception

});system.out.println("runnable的result:" + result.get());

}private void addcallable(executorservice service) throws executionexception, interruptedexception

});system.out.println("callable的result:" + result.get());

}private void addtaskrunnable(executorservice service) throws executionexception, interruptedexception

}, str);

service.submit(result);

system.out.println("taskrunnable的result:" + result.get());

}private void addtaskcallable(executorservice service) throws executionexception, interruptedexception

});service.submit(result);

system.out.println("taskcallable的result:" + result.get());

}

執行後控制台列印如下:

i/system.out: runnable的result:null

i/system.out: callable的result:這裡是callable

i/system.out: taskrunnable的result:這裡是taskrunnable

i/system.out: taskcallable的result:這裡是taskcallable

其中第三個,傳入futuretask的是乙個runnable實現和乙個result。在futuretask中,會自動把這兩者包裝成乙個callable,所以其實後三個都是callable。

Executors類中建立執行緒池的幾種方法的分析

要配置乙個執行緒池是比較複雜的,尤其是對於執行緒池的原理不是很清楚的情況下,很有可能配置的執行緒池不是較優的,因此在executors類裡面提供了一些靜態工廠,生成一些常用的執行緒池。1 newfixedthreadpool 建立固定大小的執行緒池。執行緒池的大小一旦達到最大值就會保持不變,如果某個...

Executors類中建立執行緒池的幾種方法的分析

要配置乙個執行緒池是比較複雜的,尤其是對於執行緒池的原理不是很清楚的情況下,很有可能配置的執行緒池不是較優的,因此在executors類裡面提供了一些靜態工廠,生成一些常用的執行緒池。1 newfixedthreadpool 建立固定大小的執行緒池。執行緒池的大小一旦達到最大值就會保持不變,如果某個...

建立Windows Service的幾種方式

最近由於工作需要,寫了一些windows服務程式,有一些經驗,我現在總結寫出來。目前我知道的建立建立windows服務有3種方式 a.利用.net框架類servicebase b.利用元件topshelf c.利用小工具instsrv和srvany 下面我利用這3種方式,分別做乙個windows服務...