• 线程池工厂方法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
  • 相关阅读:
    Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
    linux coreseek-4.1安装
    8个必备的PHP功能开发
    LINUX 下mysql导出数据、表结构
    PHP缩略图类
    PHP文件上传类
    PHP抓取页面的几种方式
    MySQL性能优化的最佳20+条经验
    zend studio9.0.3破解及汉化 windons版
    【转载】【面试经验】PHP中级面试题
  • 原文地址:https://www.cnblogs.com/java-spring/p/8341503.html
Copyright © 2020-2023  润新知