java 线程池的原理和使用-实现

对于线程池的创建,通过查看底层源码可知,底层都是通过ThreadPoolExecutor创建不过是默认的参数不同罢了。

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue) {
    this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
         Executors.defaultThreadFactory(), defaultHandler);
}

1、newCachedThreadPool

newCachedThreadPool 用于创建一个缓存线程池。

ExecutorService es = Executors.newCachedThreadPool();

2、newFixedThreadPool

newFixedThreadPool 用于创建一个固定的线程数量的线程池,并将线程资源放在队列中循环使用。

ExecutorService es = Executors.newFixedThreadPool(5);

3、newScheduledThreadPool

newScheduledThreadPool 创建了一个可定时调度的线程池,可设置在给定的延迟时间后执行或者定期执行某个线程任务。

 ScheduledExecutorService executorService = Executors.newScheduledThreadPool(3);
 应该执行一个延迟三秒的线程
executorService.schedule(new Run
    @Override
    public void run() {
        System.out.println("1");
    }
},3, TimeUnit.SECONDS);

 执行一个延迟一秒,每三秒执行一次的线程
executorService.scheduleAtFixedR
    @Override
    public void run() {
        System.out.println("1");
    }


},1,3,TimeUnit.SECONDS);

4、newSingleThreadExecutor

newSingleThreadExecutor 线程池会保证永远有且只有一个可用的线程,在该线程停止或者异常时,newSingleThreadExecutor 线程池会启动一个新的线程来代替该线程继续执行任务。

ExecutorService es = Executors.newSingleThreadExecutor();

5、newWorkStealingPool 创建持有足够多线程的线程池来达到快速运算的目的,在内部通过使用多个队列来减少各个线程调度产生的竞争。

 ExecutorService es = Executors.newWorkStealingPool();

6、又返回值的线程池使用方式

 class MyCalleb implements Callable<String>{
     private String s;

     public MyCalleb(String s) {
         this.s = s;
     }

     @Override
     public String call() throws Exception {
         return s;
     }
 }
ExecutorService es = Executors.newFixedThreadPool(5);
 MyCalleb mb = new MyCalleb("a");

 String s = null;

 Future future = es.submit(mb);
 System.out.println(future.get().toString());

线程池的基本原理,看完就懂了 - 【雨歌】 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值