java高级特性之多线程 线程池
2016-07-18 21:06
555 查看
系统启动一个新线程的成本是比较高的,因为它涉及与os交互。这种情况下,系统启动时即创建大量空闲的线程,就可以很好地提高性能,尤其是当程序需要创建大量生存期很短暂的线程时。
除此之外,使用线程池可以有效地控制系统中并发线程的数量。避免因并发创建的线程过多,导致系统性能下降,JVM崩溃。
Java 5以前,需要手动创建自己的线程池;Java 5开始,新增了Executors工厂类产生线程池。
使用线程池执行线程任务的步骤如下:
1.调用Executors 类的静态方法newFixedThreadPool(int nThreads),创建一个可重用的、具有固定线程数的线程池ExecutorService对象
2.创建Runnable实例,作为线程执行任务
3.调用ExecutorService对象的submit()提交Runnable实例
4.调用ExecutorService对象的shutDown()方法关闭线程池。
Executors
ExecutorService newCachedThreadPool()
返回一个带缓存的线程池,该池在必要的时候创建线程,在线程空闲60秒后终止线程。
ExecutorService newFixedThreadPool(int threads)
ExecutorService newSingleThreadExecutor()
ExecutorService
Future submit(Runnable task)
Future submit(Runnable task,T result)
void shutdown()
如下的实例代码,实现了三种开启线程的方式,另外启用了线程池的方式。
Future类型的对象封装了 异步计算的结果信息。Future对象在第二个submit()方法中,通过调用get方法在方法完成的时候返回result对象。
在使用连接池该做的事儿:
1,调用Executors类中静态的方法newCachedThreadPool或者NewFixedThreadPool
2,调用submint提交Runnable或者Callable对象
3,如果想要取消一个任务,最好保存返回的Future对象
4,当不再提交任务的时候,调用Shutdown()。
预订执行
ScheduleExecutorService接口具有预订执行或重复执行任务而设计的方法。它是一种允许使用线程池机制的java.util.Timer的泛化。
Executors类的newScheduledThreadPool和newSingleThreadScheduleExecutor方法将返回实现了如上接口的对象。
ScheduleFuture
除此之外,使用线程池可以有效地控制系统中并发线程的数量。避免因并发创建的线程过多,导致系统性能下降,JVM崩溃。
Java 5以前,需要手动创建自己的线程池;Java 5开始,新增了Executors工厂类产生线程池。
使用线程池执行线程任务的步骤如下:
1.调用Executors 类的静态方法newFixedThreadPool(int nThreads),创建一个可重用的、具有固定线程数的线程池ExecutorService对象
2.创建Runnable实例,作为线程执行任务
3.调用ExecutorService对象的submit()提交Runnable实例
4.调用ExecutorService对象的shutDown()方法关闭线程池。
Executors
ExecutorService newCachedThreadPool()
返回一个带缓存的线程池,该池在必要的时候创建线程,在线程空闲60秒后终止线程。
ExecutorService newFixedThreadPool(int threads)
ExecutorService newSingleThreadExecutor()
ExecutorService
Future submit(Runnable task)
Future submit(Runnable task,T result)
void shutdown()
如下的实例代码,实现了三种开启线程的方式,另外启用了线程池的方式。
@Test public void test01(){ new MyThread01().start(); new Thread(new MyThread02()).start(); ExecutorService threadPool = Executors.newFixedThreadPool(10); threadPool.submit( new MyThread03()); } class MyThread01 extends Thread { @Override public void run() { System. out .println("-----MyThread01" ); } } class MyThread02 implements Runnable { public void run() { System. out .println("-----MyThread02" ); } } class MyThread03 implements Callable<Integer> { @Override public Integer call() throws Exception { System. out .println("-----MyThread03" ); return 200; } }
Future类型的对象封装了 异步计算的结果信息。Future对象在第二个submit()方法中,通过调用get方法在方法完成的时候返回result对象。
在使用连接池该做的事儿:
1,调用Executors类中静态的方法newCachedThreadPool或者NewFixedThreadPool
2,调用submint提交Runnable或者Callable对象
3,如果想要取消一个任务,最好保存返回的Future对象
4,当不再提交任务的时候,调用Shutdown()。
预订执行
ScheduleExecutorService接口具有预订执行或重复执行任务而设计的方法。它是一种允许使用线程池机制的java.util.Timer的泛化。
Executors类的newScheduledThreadPool和newSingleThreadScheduleExecutor方法将返回实现了如上接口的对象。
ScheduleFuture
相关文章推荐
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- java高级特性之反射
- Spring重点—— IOC 容器中 Bean 的生命周期
- Java实现原子操作的原理
- java高级特性之集合概述 其二
- Java学习一:一些基本的语句
- Java泛型的类型擦除
- Java基础之理解Annotation
- Spring之JDBC
- javaEE技术路线图
- jdk环境配置
- Spring基础—— SpEL
- Spring开发环境配置以及入门案例
- SpringMVC的Handler处理及url映射
- 数组
- 不能从 java.io.InputStream 转换为 org.omg.CORBA.portable.InputStream
- 如何把java项目(java文件)打包成.jar文件,双击即可运行.
- 属性动画步骤总结——包含xml实现与java代码实现
- java反射机制(总结)
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第4版)