Java多线程——执行器(Executor)

Markdown编辑器上线啦,终于等到你了!使用这个编辑器写了两篇,感觉还是不错的!不过还是有一些问题,慢慢熟悉吧!

执行器

构建一个新的线程是有一定的代价的,因为涉及到和操作系统的交互。如果程序中创建了大量的生命周期很短的线程,应该使用线程池(thread pool)。

另一个使用线程池的理由是减少并发线程的数目。线程数量太多会大大降低性能甚至会使虚拟机崩溃。如果有一个会创建许多线程的算法,应该使用一个线程数“固定的”线程池以限制并发线程的总数。

Executor类构建线程池的静态方法

方法 描述
newCachedThreadPool 必要时创建新线程,空闲线程会被保留60秒
newFixedThreadPool 该池包含固定数量的线程;空闲线程会一直被保留
newSingleThreadExecutor 只有一个线程的“池”,该线程顺序执行每一个提交的任务
newScheduledThreadPool 用于预定执行而构建的固定线程池,替代java.util.Timer
newSingleThreadScheduledExecutor 用于预定执行而构建的单线程“池”

线程池

newCachedThreadPool方法构建了一个线程池,对于每个任务,如果有空闲的线程可用,立即让它执行任务,如果没有可用的空闲线程,则创建一个新线程。

newFixedThreadPool方法构建一个具有固定大小的线程池。如果提交的任务数多于空闲的线程数,那么把得不到的服务的任务放置到队列中。当其他任务完成以后再运行它们。

newSingleThreadExecutor是一个退化了的大小为1的线程池:由一个线程执行提交的任务,一个接着一个。这三个方法返回实现了ExecutorService接口的ThreadPoolExecutor类的对象。

使用连接池:
  1. 调用Executors类中静态的方法newCachedThreadPool或newFixedThreadPool。
  2. 调用submit提交Runnable或Callable对象。
  3. 如果想要取消一个任务,或如果提交Callable对象,那就要保存好返回的Future对象。
  4. 当不在提交任何任务时,调用shutdown。

MacthCounter类:

/**
 * @author xzzhao
 */
public class MacthCounter implements Callable<Integer> {
   

    private final File            directory;
    private final String          keyword;
    private final ExecutorService pool;
    private int                   count;

    public MacthCounter(File directory, String keyword, ExecutorService pool) {
        super();
        this.directory = directory;
        this
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值