基于线程池的匹配文件数量计算
上一篇 /
下一篇 2012-06-19 09:28:58
/ 个人分类:杂谈
构建一个新的线程的代价还是有些高的,因为它涉及与操作系统的交互。如果你的程序创建了大量生存期很短的线程,那就应该使用线程池。一个线程池包含大量准备运行的空闲线程。你将一个Runnable对象给线程池,线程池中的一个线程就会调用run方法。当run方法退出时,线程不会死亡,而是继续在池中准备为下一个请求提供服务。51Testing软件测试网,~]r$Q'P't|0\ 执行器(Executor)类有大量用来构建线程池的静态工厂方法,下表给出了一个总结。
7j2G}&fi#W051Testing软件测试网BNd,fN5gL
newCachedThreadPool、newFixedThreadPool和newSingleThreadExecutor这三个方法返回ThreadPoolExecutor类(这个类实现了ExecutorService接口)对象。51Testing软件测试网R$DBht;W%X-r{
向线程池提交任务的方法为:将一个实现Runnable或Callable接口的对象提交给ExecutorService:
9}V2b_S)W'h#ox0 Future<?> submit(Runable task)
z/ob;[
D V+`&GqHk0 Future<T> submit(Runable task, T result)
mq$e.q"m:Z M)g#e;n0 Future<t> submit(Callable<T> task)
J9oH[q0 线程池会在适当的时候尽早执行提交的任务,调用submit时会返回一个Future对象,用以查询该任务的状态,或者取消该任务。
f WYz^"d0 第一个submit方法提交一个Runable对象返回一个Future<?>,可使用该对象调用isDone、cancel、或者isCancelled来查询任务状态。但是此Future对象的get方法在任务完成的时候知识简单的返回null51Testing软件测试网_^nsd
第二个版本的submit方法同样提交一个Runable对象,并且返回Future的get方法在任务完成的时候返回传入的result对象
!HIR,|Kp0 第三个submit方法提交一个Callable对象,并且返回的Future对象将在计算结构、准备好的时候得到它。
{l%r.y/?D
~9B0
当想要注销一个线程池,可调用shutdown方法,该方法启动该线程池的关闭序列。此时线程池并不是马上就壮烈牺牲了线程也没了,而是等待所以任务都
完成以后,线程池中的线程才会死亡,被关闭的执行器不再接受新任务。也可以调用shutdownNow,此时线程池会取消正在排队等待处理的任务并且试图
中断正在执行的线程。
4UY
E*["g0^0 下面总结了在使用连接池时应该做的事:51Testing软件测试网qfC^#b{{,V
1、调用Executor类中静态的newCachedThreadPool或newFixedThreadPool方法。51Testing软件测试网Fzl A,Sv+?
2、调用submit来提交一个Runnable或Callable对象。