自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

[[423256]]

繼承Thread

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

 

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

實現(xiàn)Runnale接口。

 

  1. public static class MyRunable implements Runnable { 
  2.  
  3.     @Override 
  4.     public void run() { 
  5.         System.out.println("當(dāng)前線程"+Thread.currentThread().getId()); 
  6.         int i = 10/2; 
  7.         System.out.println("運行結(jié)果"+i); 
  8.  
  9.     } 

調(diào)用。

 

  1. /** 
  2.  * runable的啟動方式 
  3.  */ 
  4.  
  5. MyRunable runable = new MyRunable(); 
  6. new Thread(runable).start(); 
  7. System.out.println("main--end"); 

Callable

 

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

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

 

  1. /** 
  2.  * callale的啟動方式 
  3.  */ 
  4. FutureTask<Integer> futureTask =new FutureTask<>(new Callale01()); 
  5. //取返回結(jié)果。 
  6. Integer i = futureTask.get(); 
  7. new Thread(futureTask).start(); 
  8. System.out.println("返回結(jié)果是:"+i); 

線程池

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

 

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

常見的4種線程池。

1 newCachedThreadPool()

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

  1. Executors.newCachedThreadPool(); 

2.newFixedThreadPool(6)

創(chuàng)建一個固定大小的線程池。

3 newScheduledThreadPool()

定時任務(wù)的線程池。

4.newSingleThreadExecutor()

  1. Executors.newSingleThreadExecutor(); 

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2023-11-22 08:37:40

Java線程池

2009-03-12 10:52:43

Java線程多線程

2013-05-23 15:59:00

線程池

2013-06-08 13:07:23

Java線程池調(diào)度器

2023-06-07 13:49:00

多線程編程C#

2019-10-30 21:27:51

Java中央處理器電腦

2012-05-15 02:18:31

Java線程池

2012-02-29 13:26:20

Java

2016-11-10 16:30:22

Java多線程

2021-06-06 23:40:53

線程池使用場景

2009-06-29 18:08:51

Java多線程join方法

2024-11-27 08:15:50

2013-06-13 13:19:38

多線程

2024-01-15 10:55:40

Python多線程開發(fā)

2009-06-29 18:00:05

Java多線程Runnable接口創(chuàng)建線程

2024-06-04 07:52:04

2009-09-22 17:21:24

線程局部變量

2009-06-29 18:03:15

Java多線程線程的生命周期

2015-03-24 16:29:55

默認(rèn)線程池java

2015-08-20 09:17:36

Java線程池
點贊
收藏

51CTO技術(shù)棧公眾號