Java的多线程和线程池的使用,你真的清楚了吗?
Java的多線(xiàn)程和線(xiàn)程池的使用
多線(xiàn)程大大提高程序運(yùn)行效率,我們?cè)陂_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)開(kāi)啟一個(gè)線(xiàn)程來(lái)執(zhí)行一些費(fèi)時(shí)的任務(wù)。開(kāi)啟一個(gè)線(xiàn)程有4種方式,在下面的文章我將詳細(xì)的去講解。
繼承Thread
繼承Thread去執(zhí)行任務(wù),確實(shí)可以開(kāi)啟一個(gè)線(xiàn)程去執(zhí)行任務(wù),如果經(jīng)常的去開(kāi)啟一些線(xiàn)程,也會(huì)導(dǎo)致系統(tǒng)資源的浪費(fèi)。
實(shí)現(xiàn)Runnale接口。
public static class MyRunable implements Runnable { @Override public void run() { System.out.println("當(dāng)前線(xiàn)程"+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)前線(xiàn)程"+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);線(xiàn)程池
線(xiàn)程池才是我們java開(kāi)發(fā)中,經(jīng)常用到一種開(kāi)啟多線(xiàn)程的方式,線(xiàn)程池,自己去管理線(xiàn)程。可以節(jié)省系統(tǒng)資源。通常我們會(huì)將下面的一些配置寫(xiě)在一些配置類(lèi)中
常見(jiàn)的4種線(xiàn)程池。
1 newCachedThreadPool()
創(chuàng)建一個(gè)可緩存的線(xiàn)程池,如果線(xiàn)程池長(zhǎng)度超過(guò)了處理的需要,可靈活的回收空閑線(xiàn)程。若無(wú)可回收。則創(chuàng)建新線(xiàn)程。
2.newFixedThreadPool(6)
創(chuàng)建一個(gè)固定大小的線(xiàn)程池。
3 newScheduledThreadPool()
定時(shí)任務(wù)的線(xiàn)程池。
4.newSingleThreadExecutor()
Executors.newSingleThreadExecutor();記得多多支持Remi醬!!
文章來(lái)源:https://www.tuicool.com/articles/YNbyayI
總結(jié)
以上是生活随笔為你收集整理的Java的多线程和线程池的使用,你真的清楚了吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java后端架构开荒实战(二)——单机到
- 下一篇: 你真的弄明白了吗?Java并发之AQS详