• ThreadPoolExecutor


    以下知识来源于:http://blog.csdn.net/a347911/article/details/53434943

    package com.test.java.concurrent;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    public class MyThreadPool {
        public static void main(String[] args) {
            /**
             * 1.在使用有界队列的时候:若有新的任务需要执行,如果线程池实际线程数小于corePoolSize核心线程数的时候,则优先创建线程。
             * 若大于corePoolSize时,则会将多余的线程(任务)存放在队列中,
             * 若队列已满,且最请求线程小于maximumPoolSize的情况下,则自定义的线程池会创建新的线程,
             * 若队列已满,且最请求线程大于maximumPoolSize的情况下,则执行拒绝策略,或其他自定义方式。
             */
            BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<Runnable>(3);
    
            ThreadPoolExecutor pool = new ThreadPoolExecutor(// 自定义一个线程池
                    1, // corePoolSize
                    2, // maximumPoolSize
                    60l, // 60s
                    TimeUnit.SECONDS, blockingQueue // 有界队列,容量是3个
            );
    
            MyTask task1 = new MyTask(1, "task1");
            MyTask task2 = new MyTask(2, "task2");
            MyTask task3 = new MyTask(3, "task3");
            MyTask task4 = new MyTask(4, "task4");
            MyTask task5 = new MyTask(5, "task5");
            MyTask task6 = new MyTask(6, "task6");
            /**
             * 此处可以一步步打开看执行结果是不是符合上面注释所说的情况。
             */
            pool.execute(task1);
            pool.execute(task2);
            pool.execute(task3);
            pool.execute(task4);
            pool.execute(task5);
            pool.execute(task6);
    
            pool.shutdown();
        }
    }
    package com.test.java.concurrent;
    
    public class MyTask implements Runnable{
        
        private int id;  
        private String name;  
        public int getId() {  
            return id;  
        }  
        public void setId(int id) {  
            this.id = id;  
        }  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public MyTask(int id, String name) {  
            super();  
            this.id = id;  
            this.name = name;  
        }  
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {  
                System.out.println("run taskId = "+this.id);  
                Thread.sleep(5000);  
            } catch (InterruptedException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } 
        }
        @Override  
        public String toString() {  
            return Integer.toString(this.id);  
        }  
    }
  • 相关阅读:
    Anoconda管理Python版本 | Python
    VSCode用以Python开发的配置 | VSCode
    不联网的情况下安装python环境 | Python(转)
    批量按要求修改文件名
    [OpenLayers] 控件系列之SelectFeature同时支持hover与click
    python使用suds调用webservice接口
    【转载】eMBMS知识点汇总(概念/应用场景/工作原理/标准进程/发展现状)
    处理器分类
    3GPP Release 4G-5G 演进
    浅谈css中一个元素如何在其父元素居中显示
  • 原文地址:https://www.cnblogs.com/heben/p/7088647.html
Copyright © 2020-2023  润新知