基于线程池的匹配文件数量计算

发表于:2012-6-18 09:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:一筐    来源:51Testing软件测试网采编

  构建一个新的线程的代价还是有些高的,因为它涉及与操作系统的交互。如果你的程序创建了大量生存期很短的线程,那就应该使用线程池。一个线程池包含大量准备运行的空闲线程。你将一个Runnable对象给线程池,线程池中的一个线程就会调用run方法。当run方法退出时,线程不会死亡,而是继续在池中准备为下一个请求提供服务。

  执行器(Executor)类有大量用来构建线程池的静态工厂方法,下表给出了一个总结。

  newCachedThreadPool、newFixedThreadPool和newSingleThreadExecutor这三个方法返回ThreadPoolExecutor类(这个类实现了ExecutorService接口)对象。

  向线程池提交任务的方法为:将一个实现Runnable或Callable接口的对象提交给ExecutorService:

  Future<?> submit(Runable task)
  Future<T> submit(Runable task, T result)
  Future<t> submit(Callable<T> task)

  线程池会在适当的时候尽早执行提交的任务,调用submit时会返回一个Future对象,用以查询该任务的状态,或者取消该任务。

  第一个submit方法提交一个Runable对象返回一个Future<?>,可使用该对象调用isDone、cancel、或者isCancelled来查询任务状态。但是此Future对象的get方法在任务完成的时候知识简单的返回null

  第二个版本的submit方法同样提交一个Runable对象,并且返回Future的get方法在任务完成的时候返回传入的result对象

  第三个submit方法提交一个Callable对象,并且返回的Future对象将在计算结构、准备好的时候得到它。

  当想要注销一个线程池,可调用shutdown方法,该方法启动该线程池的关闭序列。此时线程池并不是马上就壮烈牺牲了线程也没了,而是等待所以任务都完成以后,线程池中的线程才会死亡,被关闭的执行器不再接受新任务。也可以调用shutdownNow,此时线程池会取消正在排队等待处理的任务并且试图中断正在执行的线程。

  下面总结了在使用连接池时应该做的事:

  1、调用Executor类中静态的newCachedThreadPool或newFixedThreadPool方法。

  2、调用submit来提交一个Runnable或Callable对象。

  3、如果希望能够取消任务或如果提交了一个Callable对象,那就保存好返回的Future对象。

  4、当不想再提交任何任务时调用shutdown。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号