文档章节

并发编程 — 初解线程池

larryee
 larryee
发布于 2015/01/14 21:34
字数 719
阅读 4
收藏 0
什么是线程池: 
      线程池和对象池链接池一样保存着多个线程对象,为了节省系统在多线程并发时不断创建线程和销毁线程所带来的额外开销.线程池的基本功能就是线程的复用 


JDK5线程池: 
      为了能够更好的控制多线程,JDK5后提供了Executor框架,它是一个现成的线程池实现,帮助开发人员有效的进行线程控制 


Executor框架使用: 

Java代码   收藏代码
  1. public class TestMain {  
  2.   
  3.     @Test   
  4.     public void testExecutor() {  
  5.           
  6.         Executor threadPool = null;  
  7.   
  8.         /* 
  9.          * 该方法返回一个固定线程数量的线程池,该线程池中的线程数量 是固定不变的, 
  10.          * 当一个新任务被提交时,若然没有空闲线程,则会暂时存储在一个任务队列中, 
  11.          * 待有空闲的线程便处理任务队列中的任务 
  12.          */  
  13.         threadPool = Executors.newFixedThreadPool(10);  
  14.   
  15.         /* 
  16.          * 该方法返回一个只有一个线程的线程池,当一个新任务被提交后, 
  17.          * 会进入任务队列待有空闲线程时即处理任务队列中的任务 
  18.          */  
  19.         threadPool = Executors.newSingleThreadExecutor();  
  20.   
  21.         /* 
  22.          * 该方法返回一个可根据实际任务数量调整线程数量的线程池, 
  23.          * 该线程池的线程数量是不固定的,若有空闲线程,则会优先处理任务, 
  24.          * 若所有线程都在执行任务时又有新的任务被提交,则会创建新的线程去处理任务 
  25.          */  
  26.         threadPool = Executors.newCachedThreadPool();  
  27.   
  28.         /* 
  29.          * 每个创建线程池的方法都有ThreadFactory的重载 
  30.          */  
  31.         threadPool = Executors.newFixedThreadPool(10new ThreadFactory() {  
  32.   
  33.             @Override  
  34.             public Thread newThread(Runnable r) {  
  35.                 /* 
  36.                  * 使用ThreadFactory能控制线程产生时的细节操作 
  37.                  */  
  38.                 Thread thread = new Thread(r);  
  39.                 // 设置为守护线程  
  40.                 thread.setDaemon(true);  
  41.                 // 线程优先级为最高  
  42.                 thread.setPriority(Thread.MAX_PRIORITY);  
  43.                 return thread;  
  44.             }  
  45.         });  
  46.   
  47.         // 提交一個任务  
  48.         threadPool.execute(new Runnable() {  
  49.             @Override  
  50.             public void run() {  
  51.                 // executor logic  
  52.             }  
  53.         });  
  54.   
  55.         /* 
  56.          *  但我们一般使用ExecutorService方便我們操作线程池, 
  57.          *  通过ExecutorService我们能使用更多的方式操作线程池 
  58.          */  
  59.   
  60.           
  61.         /* 
  62.          *  其实通过Executors创建的线程池返回的都是ExecutorService对象, 
  63.          *  Executor是ExecutorService的父类 
  64.          */  
  65.         ExecutorService service = (ExecutorService) threadPool;  
  66.   
  67.           
  68.         /* 
  69.          * 提交一个有返回值(计算结果)的任务 温馨提示,若然任务需要返回计算结果, 
  70.          * 使用service.submit(),若然任务不需要 
  71.          * 任何返回结果,使用service.execute(); 
  72.          */  
  73.         Future<Integer> future = service.submit(new Callable<Integer>() {  
  74.   
  75.             @Override  
  76.             public Integer call() throws Exception {  
  77.                 return 10;  
  78.             }  
  79.         });  
  80.   
  81.         /* 
  82.          * 当线程池使用完毕可以使用shutdown关闭线程池,  
  83.          * shutdown是较为温柔的关闭方式,等待任务执行完毕后才关闭线程池 
  84.          * 若然想马上关闭,可以使用service.shutdownNow(); 
  85.          */  
  86.         service.shutdown();  
  87.           
  88.         //更多的API请参考JDK帮助文档  
  89.     }  
  90. }  


      JDK5后提供了Executor框架方便了开发人员,提供了线程池的实现和简便的API操控线程池,推荐读者在使用多线程时优先使用JDK内置线程池 

本文转载自:http://blog.csdn.net/u012992171/article/details/28410103

larryee
粉丝 0
博文 51
码字总数 393
作品 0
浦东
私信 提问
java并发编程——线程池和Executor介绍

第一部分:概述 早期的应用程序大多是单线程串行执行的,虽然程序的任务边界清晰有序,但是执行的效率却很低,尤其是执行花费时间较长的操作,会导致大量的等待和堆积。为了提高程序的执行效...

isam
2016/05/26
104
0
SEAD架构介绍

由于这个架构没怎么学习,只是简单做一下记录,据说 Cassandra就是用架构实现的 一、传统并发模型的缺点 基于线程的并发 特点: 每任务一线程 直线式的编程 使用资源昂高, context切换代价高...

满小茂
2016/04/15
173
0
并发编程(五)——生产者消费者模式

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里...

whc20011
2016/10/31
60
0
后台开发常问面试题集锦(问题搬运工,附链接)

Java基础问题 String的’+’的性能及原理 java之yield(),sleep(),wait()区别详解-备忘笔记 深入理解Java Stream流水线 抽象 & abstract关键字 Java final 修饰符知识点总结(必看篇) Java中的...

大黄有故事
2017/11/18
0
0
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
754
1

没有更多内容

加载失败,请刷新页面

加载更多

iptables删除命令中的相关问题

最近在做一个中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误。iptables: Bad rule (does a matching rule exist in t...

xiangyunyan
28分钟前
2
0
IT兄弟连 HTML5教程 HTML5表单 新增的表单属性1

HTML5 Input表单为<form>和<input>标签添加了几个新属性,属性如表1。 1 autocomplete属性 autocomplete属性规定form或input域应该拥有自动完成功能,当用户在自动完成域中开始输入时,浏览器...

老码农的一亩三分地
56分钟前
5
0
OSChina 周五乱弹 —— 葛优理论+1

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享米津玄師的单曲《LOSER》: mv中的舞蹈诡异却又美丽,如此随性怕是难再跳出第二次…… 《LOSER》-...

小小编辑
今天
1K
19
nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部