Java线程池

作者: 雯艺雪 | 来源:发表于2019-03-21 23:48 被阅读0次

    一、自定义线程池集成ThreadPoolExecutor

    二、JDK自带的几种线程池

    1、newFixedThreadPool

      newFixedThreadPool,创建固定大小的线程池,poolCoreSize和MaxPoolSize相等,到达coreSize则将新的任务放到缓存队列,有线程执行完毕,直接去取。
      创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待 。     
    

    2、newSingleThreadExecutor

    newSingleThreadExecutor,创建一个单线程的核心池,核心池的大小和最大池大小为1。
    创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。示例代码如下:
    
    ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    for (int i = 0; i < 10; i++) {
    final int index = i;
    singleThreadExecutor.execute(new Runnable() {
     
    @Override
    public void run() {
    try {
    System.out.println(index);
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    });
    }
    

    结果依次输出,相当于顺序执行各个任务。

    3、newCacheThreadPool

     无大小限制的线程池,提交一个任务就创建一个线程执行。
     创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。线程池为无限大,当执行第二个任务时第  一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
    

    4.newScheduledThreadPool

    创建一个定长线程池,支持定时及周期性任务执行。
    
    延迟执行。
    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
    scheduledThreadPool.schedule(new Runnable() {
           @Override
            public void run() {
            System.out.println("delay 3 seconds");
      }
      }, 3, TimeUnit.SECONDS);
    
    周期执行
    scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
     
            @Override
            public void run() {
                System.out.println("delay 1 seconds, and excute every 3 seconds");
          }
          }, 1, 3, TimeUnit.SECONDS);
    

    表示延迟1秒后每3秒执行一次。
    ScheduledExecutorService比Timer更安全,功能更强大。

    【参考】https://www.cnblogs.com/zhujiabin/p/5404771.html

    相关文章

      网友评论

        本文标题:Java线程池

        本文链接:https://www.haomeiwen.com/subject/embxvqtx.html