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