日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java线程池与Lambda表达式

發布時間:2024/3/13 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.而實際上,似乎只有方法體才是關鍵所在

public static void main(String[] args){Runnableimpl run=new Runnableimpl();Thread t=new Thread(run);t.start();//簡化代碼,使用匿名內部類,實現多線程程序Runnable r = new Runnable(){@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新線程");}};new Thread(r).start();//簡化代碼new Thread(new Runnable(){@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新線程");}}).start();//使用Lambda表達式,實現多線程new Thread(()->{System.out.println(Thread.currentThread().getName()+"新線程");}).start();} public class Runnableimpl implements Runnable{@Overridepublic void run(){System.out.println(Thread.currentThread().getName()+"新線程");} }

總結

以上是生活随笔為你收集整理的Java线程池与Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。