摘要:以下拋異常,因?yàn)榫€程池都沒了線程池之后提供的線程池的工廠類用來生成線程池類中的靜態(tài)方法創(chuàng)建一個(gè)可重用固定線程數(shù)的線程池參數(shù)創(chuàng)建線程池中包含的線程數(shù)量返回值接口返回的是接口的實(shí)現(xiàn)類對(duì)象我們可以使用接口接收面向接口編程線程池接口用來從線程池中獲
以下拋異常,因?yàn)榫€程池都沒了
package com.itheima.demo02.ThreadPool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
線程池:JDK1.5之后提供的 java.util.concurrent.Executors:線程池的工廠類,用來生成線程池 Executors類中的靜態(tài)方法: static ExecutorService newFixedThreadPool(int nThreads) 創(chuàng)建一個(gè)可重用固定線程數(shù)的線程池 參數(shù): int nThreads:創(chuàng)建線程池中包含的線程數(shù)量 返回值: ExecutorService接口,返回的是ExecutorService接口的實(shí)現(xiàn)類對(duì)象,我們可以使用ExecutorService接口接收(面向接口編程) java.util.concurrent.ExecutorService:線程池接口 用來從線程池中獲取線程,調(diào)用start方法,執(zhí)行線程任務(wù) submit(Runnable task) 提交一個(gè) Runnable 任務(wù)用于執(zhí)行 關(guān)閉/銷毀線程池的方法 void shutdown() 線程池的使用步驟: 1.使用線程池的工廠類Executors里邊提供的靜態(tài)方法newFixedThreadPool生產(chǎn)一個(gè)指定線程數(shù)量的線程池 2.創(chuàng)建一個(gè)類,實(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 class Demo01ThreadPool {
public static void main(String[] args) { //1.使用線程池的工廠類Executors里邊提供的靜態(tài)方法newFixedThreadPool生產(chǎn)一個(gè)指定線程數(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創(chuàng)建了一個(gè)新的線程執(zhí)行 //線程池會(huì)一直開啟,使用完了線程,會(huì)自動(dòng)把線程歸還給線程池,線程可以繼續(xù)使用 es.submit(new RunnableImpl());//pool-1-thread-1創(chuàng)建了一個(gè)新的線程執(zhí)行 es.submit(new RunnableImpl());//pool-1-thread-2創(chuàng)建了一個(gè)新的線程執(zhí)行 //4.調(diào)用ExecutorService中的方法shutdown銷毀線程池(不建議執(zhí)行) es.shutdown(); es.submit(new RunnableImpl());//拋異常,線程池都沒有了,就不能獲取線程了 }
}
package com.itheima.demo02.ThreadPool;
/*
2.創(chuàng)建一個(gè)類,實(shí)現(xiàn)Runnable接口,重寫run方法,設(shè)置線程任務(wù)
*/
public class RunnableImpl implements Runnable{
@Override public void run() { System.out.println(Thread.currentThread().getName()+"創(chuàng)建了一個(gè)新的線程執(zhí)行"); }
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75948.html
摘要:中的線程池運(yùn)用場(chǎng)景非常廣泛,幾乎所有的一步或者并發(fā)執(zhí)行程序都可以使用。代碼中如果執(zhí)行了方法,線程池會(huì)提前創(chuàng)建并啟動(dòng)所有核心線程。線程池最大數(shù)量線程池允許創(chuàng)建的線程最大數(shù)量。被稱為是可重用固定線程數(shù)的線程池。 Java中的線程池運(yùn)用場(chǎng)景非常廣泛,幾乎所有的一步或者并發(fā)執(zhí)行程序都可以使用。那么線程池有什么好處呢,以及他的實(shí)現(xiàn)原理是怎么樣的呢? 使用線程池的好處 在開發(fā)過程中,合理的使用線程...
摘要:提交任務(wù)當(dāng)創(chuàng)建了一個(gè)線程池之后我們就可以將任務(wù)提交到線程池中執(zhí)行了。提交任務(wù)到線程池中相當(dāng)簡(jiǎn)單,我們只要把原來傳入類構(gòu)造器的對(duì)象傳入線程池的方法或者方法就可以了。 我們一般不會(huì)選擇直接使用線程類Thread進(jìn)行多線程編程,而是使用更方便的線程池來進(jìn)行任務(wù)的調(diào)度和管理。線程池就像共享單車,我們只要在我們有需要的時(shí)候去獲取就可以了。甚至可以說線程池更棒,我們只需要把任務(wù)提交給它,它就會(huì)在合...
摘要:線程池主要解決兩個(gè)問題一是當(dāng)執(zhí)行大量異步任務(wù)時(shí)線程池能夠提供很好的性能。二是線程池提供了一種資源限制和管理的手段,比如可以限制現(xiàn)成的個(gè)數(shù),動(dòng)態(tài)新增線程等。該方法返回一個(gè)對(duì)象,可指定線程池線程數(shù)量。 什么是線程池? 為了避免頻繁重復(fù)的創(chuàng)建和銷毀線程,我們可以讓這些線程進(jìn)行復(fù)用,在線程池中,總會(huì)有活躍的線程在占用,但是線程池中也會(huì)存在沒有占用的線程,這些線程處于空閑狀態(tài),當(dāng)有任務(wù)的時(shí)候會(huì)從...
摘要:本文主要內(nèi)容為簡(jiǎn)單總結(jié)中線程池的相關(guān)信息。方法簇方法簇用于創(chuàng)建固定線程數(shù)的線程池。三種常見線程池的對(duì)比上文總結(jié)了工具類創(chuàng)建常見線程池的方法,現(xiàn)對(duì)三種線程池區(qū)別進(jìn)行比較。 概述 線程可認(rèn)為是操作系統(tǒng)可調(diào)度的最小的程序執(zhí)行序列,一般作為進(jìn)程的組成部分,同一進(jìn)程中多個(gè)線程可共享該進(jìn)程的資源(如內(nèi)存等)。在單核處理器架構(gòu)下,操作系統(tǒng)一般使用分時(shí)的方式實(shí)現(xiàn)多線程;在多核處理器架構(gòu)下,多個(gè)線程能夠...
摘要:用于限定中線程數(shù)的最大值。該線程池中的任務(wù)隊(duì)列維護(hù)著等待執(zhí)行的對(duì)象。線程池和消息隊(duì)列筆者在實(shí)際工程應(yīng)用中,使用過多線程和消息隊(duì)列處理過異步任務(wù)。以上是筆者在學(xué)習(xí)實(shí)踐之后對(duì)于多線程和消息隊(duì)列的粗淺認(rèn)識(shí),初學(xué)者切莫混淆兩者的作用。 多線程編程很難,難點(diǎn)在于多線程代碼的執(zhí)行不是按照我們直覺上的執(zhí)行順序。所以多線程編程必須要建立起一個(gè)宏觀的認(rèn)識(shí)。 線程池是多線程編程中的一個(gè)重要概念。為了能夠更...
閱讀 2104·2021-09-07 10:24
閱讀 2126·2019-08-30 15:55
閱讀 2106·2019-08-30 15:43
閱讀 717·2019-08-29 15:25
閱讀 1131·2019-08-29 12:19
閱讀 1983·2019-08-23 18:32
閱讀 1571·2019-08-23 17:59
閱讀 989·2019-08-23 12:22