加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java线程池的四种用法与行使场景

发布时间:2019-10-26 18:55:24 所属栏目:建站 来源:小涛
导读:一、如下方法存在的题目 newThread(){ @Override publicvoidrun(){ //营业逻辑 } }.start(); 1、起首频仍的建设、烧毁工具是一个很耗损机能的工作;2、假如用户量较量大,导致占用过多的资源,也许会导致我们的处事因为资源不敷而宕机;3、综上所述,在现实
副问题[/!--empirenews.page--]

Java线程池的四种用法与行使场景

 一、如下方法存在的题目

  1. new Thread() { 
  2.     @Override 
  3.     public void run() { 
  4.         // 营业逻辑 
  5.     } 
  6. }.start(); 

1、起首频仍的建设、烧毁工具是一个很耗损机能的工作;2、假如用户量较量大,导致占用过多的资源,也许会导致我们的处事因为资源不敷而宕机;3、综上所述,在现实的开拓中,这种操纵着实是不行取的一种方法。

二、行使线程池有什么利益

1、线程池中线程的行使率晋升,镌汰工具的建设、烧毁;2、线程池可以节制线程数,有用的晋升处事器的行使资源,停止因为资源不敷而产生宕机等题目;

三、线程池的四种行使方法

1、newCachedThreadPool

建设一个线程池,假如线程池中的线程数目过大,它可以有用的接纳多余的线程,假如线程数不敷,那么它可以建设新的线程。

  1. public static void method() throws Exception { 
  2.  
  3.     ExecutorService executor = Executors.newCachedThreadPool(); 
  4.  
  5.     for (int i = 0; i < 5; i++) { 
  6.  
  7.         final int index = i; 
  8.  
  9.         Thread.sleep(1000); 
  10.  
  11.         executor.execute(new Runnable() { 
  12.             @Override 
  13.             public void run() { 
  14.                 System.out.println(Thread.currentThread().getName() + "  " + index); 
  15.             } 
  16.         }); 
  17.     } 

执行功效

Java线程池的四种用法与行使场景

通过说明我看可以看到,至始至终都由一个线程执行,实现了线程的复用,并没有建设多余的线程。假如当我们的营业必要必然的时刻举办处理赏罚,那么将会呈现什么功效。我们来模仿一下。

Java线程池的四种用法与行使场景

可以明明的看出,此刻就必要几条线程来瓜代执行。

不敷:这种方法固然可以按照营业场景自动的扩展线程数来处理赏罚我们的营业,可是最多必要几多个线程同时处理赏罚缺是我们无法节制的;

利益:假如当第二个使命开始,第一个使命已经执行竣事,那么第二个使命会复用第一个使命建设的线程,并不会从头建设新的线程,进步了线程的复用率;

2、newFixedThreadPool

这种方法可以指定线程池中的线程数。举个栗子,假如一间澡堂子最大只能容纳20小我私人同时沐浴,那么后头来的人只能在表面列队守候。假如硬往里冲,那么只会呈现一种景象,摩擦摩擦...

起首测试一下最大容量为一个线程,那么会不会是我们猜测的功效。

  1. public static void method_01() throws InterruptedException { 
  2.  
  3.     ExecutorService executor = Executors.newFixedThreadPool(1); 
  4.  
  5.     for (int i = 0; i < 10; i++) { 
  6.  
  7.         Thread.sleep(1000); 
  8.         final int index = i; 
  9.  
  10.         executor.execute(() -> { 
  11.             try { 
  12.                 Thread.sleep(2 * 1000); 
  13.             } catch (InterruptedException e) { 
  14.                 e.printStackTrace(); 
  15.             } 
  16.             System.out.println(Thread.currentThread().getName() + "  " + index); 
  17.         }); 
  18.     } 
  19.     executor.shutdown(); 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读