• ThreadPoolExecutor扩展


    
    import java.util.concurrent.*;
    
    /**
     * ThreadPoolExecutor扩展
     */
    public class ExtThreadPool {
        public static class MyTask implements Runnable{
            public String name;
    
            public MyTask(String name) {
                this.name = name;
            }
    
            @Override
            public void run() {
                System.out.println("正在执行 Id:"+Thread.currentThread().getId()+",Name:"+Thread.currentThread().getName());
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        public static void main(String[] args) throws InterruptedException{
            ExecutorService executor = new ThreadPoolExecutor(5, 5, 0L,
                    TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()){
                @Override
                protected void beforeExecute(Thread t, Runnable r) {
                   System.out.println("准备执行:"+((MyTask)r).name);
                }
    
                @Override
                protected void afterExecute(Runnable r, Throwable t) {
                    System.out.println("执行完成:"+((MyTask)r).name);
                }
    
                @Override
                protected void terminated() {
                    System.out.println("线程池退出");
                }
            };
            for (int i = 0; i < 5; i++) {
                MyTask task = new MyTask("TASK-"+i);
                executor.execute(task);
                Thread.sleep(10);
            }
            executor.shutdown();//关闭线程池,它会等待所有任务执行完成后,再关闭线程池
        }
        //准备执行:TASK-0
        //正在执行 Id:9,Name:pool-1-thread-1
        //准备执行:TASK-1
        //正在执行 Id:10,Name:pool-1-thread-2
        //准备执行:TASK-2
        //正在执行 Id:11,Name:pool-1-thread-3
        //准备执行:TASK-3
        //正在执行 Id:12,Name:pool-1-thread-4
        //准备执行:TASK-4
        //正在执行 Id:13,Name:pool-1-thread-5
        //执行完成:TASK-0
        //执行完成:TASK-1
        //执行完成:TASK-2
        //执行完成:TASK-3
        //执行完成:TASK-4
        //线程池退出
    }
    
  • 相关阅读:
    MySql优化-你的SQL命中索引了吗
    php根据两点经纬度算距离
    二维数组排序
    php 求对数
    socket,websocket,socketio之间的关系
    PHP获取两个时间戳间的所有日期
    通过动画理解Raft公式算法
    Fabric创建通道、组织加入通道
    查看进程线程的方法
    Fabric添加节点
  • 原文地址:https://www.cnblogs.com/fly-book/p/11463205.html
Copyright © 2020-2023  润新知