日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Java的多线程和线程池的使用,你真的清楚了吗?

發(fā)布時(shí)間:2025/3/19 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的多线程和线程池的使用,你真的清楚了吗? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java的多線程和線程池的使用

多線程大大提高程序運(yùn)行效率,我們在開發(fā)過程中經(jīng)常會(huì)開啟一個(gè)線程來執(zhí)行一些費(fèi)時(shí)的任務(wù)。開啟一個(gè)線程有4種方式,在下面的文章我將詳細(xì)的去講解。

繼承Thread
繼承Thread去執(zhí)行任務(wù),確實(shí)可以開啟一個(gè)線程去執(zhí)行任務(wù),如果經(jīng)常的去開啟一些線程,也會(huì)導(dǎo)致系統(tǒng)資源的浪費(fèi)。

public static class Mythread extends Thread{ @Override public void run() { System.out.println("當(dāng)前線程"+Thread.currentThread().getId()); int i = 10/2; System.out.println("運(yùn)行結(jié)果"+i); } } //調(diào)用線程。 public static void main(String[] args) throws ExecutionException, InterruptedException { /**thread執(zhí)行方式*/ Mythread mythread = new Mythread(); mythread.start();//啟動(dòng)線程 System.out.println("main--end"); }

實(shí)現(xiàn)Runnale接口。

public static class MyRunable implements Runnable { @Override public void run() { System.out.println("當(dāng)前線程"+Thread.currentThread().getId()); int i = 10/2; System.out.println("運(yùn)行結(jié)果"+i); } }

調(diào)用。

/** * runable的啟動(dòng)方式 */ MyRunable runable = new MyRunable(); new Thread(runable).start(); System.out.println("main--end");

Callable

/** * Callable可以允許有返回值 */ public static class Callale01 implements Callable<Integer> { @Override public Integer call() throws Exception { System.out.println("當(dāng)前線程"+Thread.currentThread().getId()); int i = 10/2; System.out.println("運(yùn)行結(jié)果"+i); return i; } }

調(diào)用。這里需要用callable構(gòu)建futureTask

/** * callale的啟動(dòng)方式 */ FutureTask<Integer> futureTask =new FutureTask<>(new Callale01()); //取返回結(jié)果。 Integer i = futureTask.get(); new Thread(futureTask).start(); System.out.println("返回結(jié)果是:"+i);

線程池
線程池才是我們java開發(fā)中,經(jīng)常用到一種開啟多線程的方式,線程池,自己去管理線程。可以節(jié)省系統(tǒng)資源。通常我們會(huì)將下面的一些配置寫在一些配置類中

/** * 七大參數(shù) * corePoolSize: 1.核心線程數(shù)[一直存在]: 線程池創(chuàng)建好了以后。就準(zhǔn)備就緒的線程數(shù)量。 * maxinumPoolSize: 2 最大線程數(shù)量 * keepaliveTime: 存活時(shí)間。空閑線程的最大的等待時(shí)間。 * unit 等待時(shí)間的單位 * blockingQueue 阻塞隊(duì)列。如果任務(wù)很多就會(huì)放在隊(duì)列里面,只要有線程空閑了,就會(huì)去隊(duì)列里面去取。 * threadFactory :線程的工廠。 * RejectExecutionHandler :如果隊(duì)列滿了。按照我們指定的策略。拒絕執(zhí)行任務(wù)。 * */ ThreadPoolExecutor executor = new ThreadPoolExecutor(5,100,10,TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

常見的4種線程池。
1 newCachedThreadPool()
創(chuàng)建一個(gè)可緩存的線程池,如果線程池長度超過了處理的需要,可靈活的回收空閑線程。若無可回收。則創(chuàng)建新線程。

Executors.newCachedThreadPool();

2.newFixedThreadPool(6)
創(chuàng)建一個(gè)固定大小的線程池。

3 newScheduledThreadPool()
定時(shí)任務(wù)的線程池。

4.newSingleThreadExecutor()

Executors.newSingleThreadExecutor();

記得多多支持Remi醬!!

文章來源:https://www.tuicool.com/articles/YNbyayI

總結(jié)

以上是生活随笔為你收集整理的Java的多线程和线程池的使用,你真的清楚了吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。