zoukankan      html  css  js  c++  java
  • 线程池工厂方法newFixedThreadPool()和newCachedThreadPool()

    newFixedThreadPool()方法:

    该方法返回一个固定数量的线程池,当一个新的任务提交时,线程池中若有空闲线程,则立即执行。

    若没有。则新的任务被暂存在一个任务队列中,待线程空闲时,便处理在任务队列中的任务

    newCachedThreadPool()方法:

    该方法返回一个可根据实际情况调整线程数量的线程池。若多余一个任务的线程数量不确定,但若有空闲线程可以复用

    则会优先使用可复用的线程。若所有任务均在工作,又有新的任务提交,则会创建新的线程处理任务。所有线程在当前任务执行完毕后,将返回线程池复用。

    下面看一个实例

    package com.thread.test.ThreadPool;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class ThreadPoolDemo {
    
        public static class MyTask implements Runnable {
    
            public void run() {
                System.out.println(System.currentTimeMillis() + ":Thread ID:" + Thread.currentThread().getId());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        public static void main(String[] args) {
            MyTask myTask = new MyTask();
             ExecutorService exec = Executors.newFixedThreadPool(5);// 创建有5个线程的线程池
    //        ExecutorService exec = Executors.newCachedThreadPool();// 创建一个可根据实际情况调整线程数量线程池
            for (int i = 0; i < 10; i++) {
                exec.submit(myTask);
            }
        }
    
    }

    如果用newFixedThreadPool(),则输出如下结果:

    1516775320357:Thread ID:10
    1516775320357:Thread ID:13
    1516775320357:Thread ID:12
    1516775320357:Thread ID:11
    1516775320357:Thread ID:14
    1516775321357:Thread ID:14
    1516775321357:Thread ID:11
    1516775321357:Thread ID:13
    1516775321357:Thread ID:12
    1516775321357:Thread ID:10

    这10个线程的执行情况如下:
    前五个线程和后五个线程时间间隔为1s,并且前五个线程和后五个线程是完全一样的(看线程ID)

    如果用newCachedThreadPool(),则输出结果如下:

    1516775501829:Thread ID:11
    1516775501830:Thread ID:13
    1516775501829:Thread ID:10
    1516775501830:Thread ID:14
    1516775501829:Thread ID:12
    1516775501830:Thread ID:16
    1516775501830:Thread ID:15
    1516775501830:Thread ID:18
    1516775501830:Thread ID:17
    1516775501830:Thread ID:19
  • 相关阅读:
    改进初学者的PID-微分冲击
    孤独
    改进初学者的PID-采样时间
    mac10.9下eclipse的storm开发环境搭建
    ubuntu12.04+hadoop2.2.0+zookeeper3.4.5+hbase0.96.2+hive0.13.1伪分布式环境部署
    Linux学习笔记之rpm包管理功能全解
    Linux学习笔记之文件读取过程
    Linux学习笔记之Linux系统的swap分区
    Linux学习笔记之grep命令和使用正则表达式
    Prometheus监控学习笔记之容器监控Grafana模块
  • 原文地址:https://www.cnblogs.com/java-spring/p/8341503.html
Copyright © 2011-2022 走看看