[分享]Java 线程池的原理与实现
------------------------------------------------------------------------------------------------
这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧。 线程池就是其中之一,一提到线程,我们会想到以前《操作系统》的生产者与消费者,信号量,同步控制等等。 一提到池,我们会想到数据库连接池,但是线程池又如何呢? 建议:在阅读本文前,先理一理同步的知识,特别是syncronized同步关键字的用法。 创建线程有两种方式:继承Thread或实现Runnable。Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自己的run()方法。 wait和sleep比较: 线程池: 线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目,看一个例子: 假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为50000。一般线程池大小是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。 /** 线程池类,工作线程作为其内部类 **/ package org.ymcn.util; import java.util.Collections; import org.apache.log4j.Logger; /** private static boolean debug = taskLogger.isDebugEnabled(); public static final int SYSTEM_BUSY_TASK_COUNT = 150; public static boolean systemIsBusy = false; private static List<Task> taskQueue = Collections private ThreadPool() { private ThreadPool(int pool_worker_num) { public static synchronized ThreadPool getInstance() { /** public PoolWorker(int index) { public void stopWorker() { public boolean isWaiting() { /** 任务接口类 **/ package org.ymcn.util; import java.util.Date; /** private long taskId; public Task() { /** /** /** /** /** public Date getGenerateTime() { public Date getBeginExceuteTime() { public void setBeginExceuteTime(Date beginExceuteTime) { public Date getFinishTime() { public void setFinishTime(Date finishTime) { public Date getSubmitTime() { public void setSubmitTime(Date submitTime) { public long getTaskId() { public void setTaskId(long taskId) { } ---------------------------------------------------------- 转自:http://hi.baidu.com/obullxl/blog/item/ee50ad1ba8e8ff1f8718bf66.html |
转载于:https://www.cnblogs.com/phonegap/archive/2012/02/07/2535627.html
[分享]Java 线程池的原理与实现相关推荐
- Java 线程池的原理与实现
最近在学习线程池.内存控制等关于提高程序运行性能方面的编程技术,在网上看到有一哥们写得不错,故和大家一起分享. [分享]Java 线程池的原理与实现 这几天主要是狂看源程序,在弥补了一些以前知识空白的 ...
- 【有料】Java线程池实现原理及其在美团业务中的实践
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员 ...
- 【源码阅读计划】浅析 Java 线程池工作原理及核心源码
[源码阅读计划]浅析 Java 线程池工作原理及核心源码 为什么要用线程池? 线程池的设计 线程池如何维护自身状态? 线程池如何管理任务? execute函数执行过程(分配) getTask 函数(获 ...
- Java 线程池(ThreadPoolExecutor)原理分析与使用 – 码农网
线程池的详解 Java 线程池(ThreadPoolExecutor)原理分析与使用 – 码农网 http://www.codeceo.com/article/java-threadpool-exec ...
- Java线程池实现原理及其在美团业务中的实践
来自:美团技术团队 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池ThreadPoolExecuto ...
- 写的很好!细数 Java 线程池的原理
今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小. ...
- Java 线程池(ThreadPoolExecutor)原理分析与使用
ThreadPoolExecutor原理概述 在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使 ...
- Java线程池实现原理及其在美团业务中的实践(转载加总结)
我们知道线程有5种状态分别是新建,就绪,运行,阻塞,死亡,而对应的线程池也有5种状态RUNNING运行,线程池创建就是该状态,SHUTDOWN 不接受新任务,但是处理已存在的任务,STOP不接受新任务 ...
- java线程池工作原理和实现原理
为什么要使用线程池? 1.使用线程池可以复用池中的线程,不需要每次都创建新线程,减少创建和销毁线程的开销: 2.同时,线程池具有队列缓冲策略.拒绝机制和动态管理线程个数,特定的线程池还具有定时执行.周 ...
- java 池化_溯本求源: JAVA线程池工作原理
1. 前言 线程池是JAVA开发中最常使用的池化技术之一,可以减少线程资源的重复创建与销毁造成的开销. 2. 灵魂拷问:怎么做到线程重复利用? 很多同学会联想到连接池,理所当然的说:需要的时候从池中取 ...
最新文章
- 频率分布直方图组距如何确定_QC七大手法之直方图法,快快转发、收藏!
- exchange作业
- MyBatis 与 Hibernate 到底哪个更快?
- jQuery使用详解
- Fragment之三:根据屏幕尺寸加载不同的Fragment
- wamp环境搭建到mysql就不成功_Wamp环境搭建常见错误问题解决
- 网站设计好怎么上传到服务器的,虚拟主机上传到网站的几个步骤
- Android--Handler
- linux php pdo dblib,PDO_DBLIB (MSSQL) on Ubuntu Server
- 数字字符减去数字字符0就是数字
- 社区智慧+机器智能=奇虎经验的知识机器人
- 问题解决:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
- MFC Windows程序设计 读书笔记1
- 深度学习剖根问底:SGD算法详解
- C#创建,调用WebS'ervice
- 2的17次方java中表示什么,2的17次方(11的余数是多少)
- 最新腾讯防水墙滑块验证码破解,代码可以直接运行
- 电脑插入耳机检测不到没反应怎么办?
- android实现拍照及获取照片上传至接口
- 什么原因导致了儿童自闭症?跟父母养育有关吗?
热门文章
- Windows Mobile如何得到资源文件中的文件
- 解决VB6.0中不能加载MSCOMCTL.OCX的错误提示
- 证券期货信息安全等级保护测评
- JavaScript中对象的比较
- lsb_release -a 查询Linux系统版本
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树...
- SVN 与CVS 和VSS的区别
- 数字电平(一):TTL和CMOS
- numpy基础1多维数组对象
- Cent OS防火墙配置端口开放