Java线程池与Lambda表达式
Java線程池
有沒有一種方法使得線程可以復(fù)用(反復(fù)使用),就是執(zhí)行完一個任務(wù),并不被銷毀,而是可以繼續(xù)執(zhí)行其它的任務(wù)?
在Java中可以通過線程池來達(dá)到這樣的效果
線程池:其實(shí)就是一個容納多個線程的容器,其中的線程可以反復(fù)使用,省去了頻繁創(chuàng)建線程對象的操作,無需反復(fù)創(chuàng)建線程而消耗過多資源
線程池:容器–>集合(ArrayList、Hashset、Linkedlist hashmap)
Java.util.concurrent.Executors:線程池的工廠類,用來生成線程池
Executors類中的靜態(tài)方法:
static ExecutorService newFixedThreadPool(int nThreads)創(chuàng)建一個可重用固定線程數(shù)的線程池參數(shù):int nThreads:創(chuàng)建線程池中包含的線程數(shù)量返回值:ExecutorService接口:返回的是ExecutorService接口的實(shí)現(xiàn)類對象,我們可以使ExecutorService接口接收(面向接口編程)java.util.concurrent.ExecutorService:線程池接口用來從線程池中獲取線程,調(diào)用start方法,執(zhí)行線程任務(wù)submit(Runnable task) 提交一個Runnable任務(wù)用于執(zhí)行關(guān)閉/銷毀線程池的方法void shutdown()線程池的使用步驟:
1.使用線程池的工廠類Executors里邊提供的靜態(tài)方法newFixedThreadPool生產(chǎn)一個指定線程數(shù)量的線程池
2.創(chuàng)建一個類,實(shí)現(xiàn)Runnable接口,重寫run方法,設(shè)置線程任務(wù)
3.調(diào)用ExecutorService中的方法submit(),傳遞線程任務(wù)(實(shí)現(xiàn)類),開啟線程,執(zhí)行run方法
4.調(diào)用ExecutorService中的方法shutdown()銷毀線程池(不建議執(zhí)行)
public static void main(String[] args) {//1.使用線程池的工廠類Executors里邊提供的靜態(tài)方法newFixedThreadPool生產(chǎn)一個指定線程數(shù)量的線程池ExecutorService es= Executors.newFixedThreadPool(2);//3.調(diào)用ExecutorService中的方法submit(),傳遞線程任務(wù)(實(shí)現(xiàn)類),開啟線程,執(zhí)行run方法es.submit(new Runnableimpl());//pool-1-thread-1新線程//線程池會一直開啟,使用完了線程,會自動把線程歸還給線程池,線程可以繼續(xù)使用es.submit(new Runnableimpl());//pool-1-thread-2新線程//4.調(diào)用ExecutorService中的方法shutdown()銷毀線程池(不建議執(zhí)行)es.shutdown();es.submit(new Runnableimpl());//線程池已銷毀,拋異常,就不能獲取線程了} //2.創(chuàng)建一個類,實(shí)現(xiàn)Runnable接口,重寫run方法,設(shè)置線程任務(wù) public class Runnableimpl implements Runnable{@Overridepublic void run(){System.out.println(Thread.currentThread().getName()+"新線程");} }Lambda表達(dá)式
函數(shù)式的編程思想:
面向?qū)ο筮^分強(qiáng)調(diào)“必須通過對象的形式來做事情”,而函數(shù)式思想則盡量忽略面向?qū)ο蟮膹?fù)雜語法–強(qiáng)調(diào)做什么,而不是以什么形式做
面向?qū)ο蟮乃枷?#xff1a;
做一件事情,找一個能解決這個事情的對象,調(diào)用對象的方法,完成事情
函數(shù)式編程思想:
只要能獲取到結(jié)果,誰去做的,怎么做的都不重要,重視的是結(jié)果,不重視過程
Thread類的匿名內(nèi)部類用法
1.Thread類需要Runnable接口作為參數(shù),其中的抽象run方法是用來指定線程任務(wù)內(nèi)容的核心
2.為了指定run的方法體,不得不需要Runnable接口的實(shí)現(xiàn)類
3.為了省去定義一個Runnableimpl實(shí)現(xiàn)類的麻煩,不得不使用匿名內(nèi)部類
4.必須覆蓋重寫抽象run方法,所以方法名稱、方法參數(shù)、方法返回值不得不再寫一遍,且不能寫錯
5.而實(shí)際上,似乎只有方法體才是關(guān)鍵所在
總結(jié)
以上是生活随笔為你收集整理的Java线程池与Lambda表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux原生桌面,亲手打造自己的Lin
- 下一篇: php socket 模拟post,用P