zoukankan      html  css  js  c++  java
  • 线程池1

    任务类:

    package com._ThreadPool;
    
    public class MyTask implements Runnable {
        private int taskId;
        public MyTask(int id){
            this.taskId = id;
        }
        @Override
        public void run() {
            System.out.println("Mytask" + taskId +"开始执行 ");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Mytask" + taskId + "执行结束 ");
        }
    }

    线程池1:

    package com._ThreadPool;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.Executor;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    public class MyExecutor {
    
        public static void main(String[] args) {
            ThreadPoolExecutor executor = new ThreadPoolExecutor(5,10,200,TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));
    
            for(int i = 0 ;i < 15 ;i ++){
                MyTask task = new MyTask(i);
                executor.execute(task);
                System.out.println("线程池中的线程数量" + executor.getPoolSize()+
                    "队列中等待的数目" + executor.getQueue().size() +
                    "已经执行完的任务数目" + executor.getCompletedTaskCount());
            }
    
            executor.shutdown();
        }
    
    }

    结果:

    Mytask0开始执行 
    线程池中的线程数量1队列中等待的数目0已经执行完的任务数目0
    线程池中的线程数量2队列中等待的数目0已经执行完的任务数目0
    Mytask1开始执行 
    线程池中的线程数量3队列中等待的数目0已经执行完的任务数目0
    Mytask2开始执行 
    线程池中的线程数量4队列中等待的数目0已经执行完的任务数目0
    Mytask3开始执行 
    线程池中的线程数量5队列中等待的数目0已经执行完的任务数目0
    Mytask4开始执行 
    线程池中的线程数量5队列中等待的数目1已经执行完的任务数目0
    线程池中的线程数量5队列中等待的数目2已经执行完的任务数目0
    线程池中的线程数量5队列中等待的数目3已经执行完的任务数目0
    线程池中的线程数量5队列中等待的数目4已经执行完的任务数目0
    线程池中的线程数量5队列中等待的数目5已经执行完的任务数目0
    线程池中的线程数量6队列中等待的数目5已经执行完的任务数目0
    Mytask10开始执行 
    线程池中的线程数量7队列中等待的数目5已经执行完的任务数目0
    Mytask11开始执行 
    线程池中的线程数量8队列中等待的数目5已经执行完的任务数目0
    Mytask12开始执行 
    线程池中的线程数量9队列中等待的数目5已经执行完的任务数目0
    Mytask13开始执行 
    线程池中的线程数量10队列中等待的数目5已经执行完的任务数目0
    Mytask14开始执行 
    Mytask0执行结束 
    Mytask5开始执行 
    Mytask3执行结束 
    Mytask14执行结束 
    Mytask13执行结束 
    Mytask11执行结束 
    Mytask1执行结束 
    Mytask2执行结束 
    Mytask10执行结束 
    Mytask4执行结束 
    Mytask12执行结束 
    Mytask9开始执行 
    Mytask8开始执行 
    Mytask7开始执行 
    Mytask6开始执行 
    Mytask5执行结束 
    Mytask7执行结束 
    Mytask6执行结束 
    Mytask8执行结束 
    Mytask9执行结束 
    
    Process finished with exit code 0

    首先填满核心线程数,然后填满队列,然后填满最大线程数。

  • 相关阅读:
    12.2 ROS NavFn全局规划源码解读_2
    12.1 ROS NavFn全局规划源码_1
    12 ROS Movebase主体源码解读
    11 ROS 动态参数调节
    10. ROS costmap代价地图
    无人驾驶汽车1: 基于Frenet优化轨迹的无人车动作规划方法
    VC下加载JPG/GIF/PNG图片的两种方法
    vc++加载透明png图片方法-GDI+和CImage两种
    供CImage类显示的半透明PNG文件处理方法
    使用MFC CImage类绘制PNG图片时遇到的问题
  • 原文地址:https://www.cnblogs.com/da-peng/p/9821709.html
Copyright © 2011-2022 走看看