Using Executor 管理线程池,用线程池建立线程
来源:互联网 发布:手机淘宝客户端 编辑:程序博客网 时间:2024/06/05 00:59
一、功能:建立干活线程对象全部放入线程池中,驱动线程不用我们写了,这个线程池应该会自己去建立驱动线程
1、Executor:
1》管理 干活线程 对象
2》以前(new Thread 驱动线程)来驱动干活线程干活。
3》现在不需要建立驱动干活线程了,建立好干活线程后,直接交给Executor来管理。
对象(方法)------干活线程------驱动线程--executor
2、 Executors:产生Executor对象的工厂,由Executors来决定用Executor的哪一种类型。
Executor,ExecutorService ,ThreadPoolExecutor :属于同一类型
1》Executor:是一个接口,它的实现类是ThreadPoolExecutor ,由Executors的静态方法去调用实现类。
2》建立Executor对象时,为什么不直接使用使用 new ThreadPoolExecutor 呢?
3》而又加一层Executors,通过Executors去建立ThreadPoolExecutor 对象呢?
ExecutorService exec = Executors.newSingleThreadExecutor();
ExecutorService:就是在Executor 的基础上加了一些功能。
答案:也许还是用java经常谈的Factory模式,即所有新建的对象放在一个工厂(Executors)里建立。
因为Executor可以有多种对象,根据池子的能放干活线程的多少分成以下三种,
Executor的种类:CachedThreadPool,FixedThreadPool,SingleThreadExecutor
二、池子能放多少线程的几种规定
1、CachedThreadPool :池子可以放许多线程 ,个数不限制。
package concurrency;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CachedThreadPool {
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++)
exec.execute(new LiftOff());
exec.shutdown();
}
}
//Very often, a single Executor can be used to create and manage all the tasks in your system:一个Executor 对象能管理所有对象的任务。
方法:ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());
功能:1》在缓冲区建立一个池子,放新的干活线程,但要用干活线程时先去池子里找,有,就用上,没有,就建立一个新干活线程扔到池子里。
2》如果在一个线程池里的线程60秒不用,则从池中删除此线程。
2、FixedThreadPool: 池中只能放几个固定的干活线程数,当建立Executor对象时就定义好。
例子:线程池每次只允许5个干活线程。
package concurrency;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPool {
public static void main(String[] args) {
// Constructor argument is number of threads:
ExecutorService exec = Executors.newFixedThreadPool(5);
for (int i = 0; i < 5; i++)
exec.execute(new LiftOff());
exec.shutdown();
}
}
3、SingleThreadExecutor:这下好,池子放的干活线程数,越来越少了,一个池子只放一个干活线程。
主要是一个任务完成后,才调用下一个任务,哪么要线程池干吗?以前对象也是这样执行的?不懂????
package concurrency;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SingleThreadExecutor {
public static void main(String[] args) {
ExecutorService exec = Executors.newSingleThreadExecutor();
for (int i = 0; i < 5; i++)
exec.execute(new LiftOff());
exec.shutdown();
}
}new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));
参考文章:http://www.cnblogs.com/MOBIN/p/5436482.html
- Using Executor 管理线程池,用线程池建立线程
- Executor线程,线程池
- 多线程五---------线程池 Executor 管理线程
- Executor线程池实例
- 线程池与Executor
- Executor线程池
- Executor线程池解析
- Executor线程池扩展
- java线程池Executor
- Executor和线程池
- Java 线程池(Executor)
- Java 线程池-Executor
- Executor框架管理线程
- 线程 线程池 Executor框架 读笔
- 线程并发六:线程池--Executor框架
- 线程池Executor与ExecutorService
- Java 线程池(一)---Executor
- Executor线程池提交任务
- 未来网络发展方向之一:5G时代
- 《UNIX网络编程 卷1》 笔记: 竞争条件!
- Day06-Android中测试,数据存储,登录案例
- 游戏框架及入门(Cocos2d,unity3d)等
- java--cookie&session
- Using Executor 管理线程池,用线程池建立线程
- Mongodb3.4的安装
- mybatis常用jdbcType数据类型
- Day07-Android中SQLite数据存储,ListView的基本使用
- 快速排序
- jsp文件之间的链接修改
- 在英语环境下的 Ubuntu14.04中安装 Sogou搜狗拼音输入法
- 音视频框架
- 背包问题模板(01背包,完全背包,多重背包)