• 手工创建一个线程池


    手工创建一个线程池,执行callable任务

    /**
     * @Information:
     * @Author: HeHaoYuan
     * @Date: Created at 13:48 on 2019/8/12
     * @Package_Name: PACKAGE_NAME
     */
    import java.util.concurrent.*;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class MyExecutorService implements Callable {
        int tick = 200;
        private Lock lock = new ReentrantLock();
    
        @Override
        public String call() throws Exception {
            for (int i = 0; i < 200; i++) {
                lock.lock();
                if (tick > 0) {
                    TimeUnit.MILLISECONDS.sleep(20);
                    System.out.println(Thread.currentThread().getName()+"票还剩下" + tick-- + "张");
                    lock.unlock();
                }
            }
            return "票已经卖完";
        }
    }
    class ExecutorTest {
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            MyExecutorService thread1 = new MyExecutorService();
    
            /**
    
             * 核心线程池的大小是:3
    
             * 线程池的最大数量:5
    
             * 空闲线程的存活时间:2000
    
             * 空闲线程的存活时间的单位:ms
    
             * 工作队列:基于链表结构的阻塞队列
    
             * 饱和策略:没有声明默认采用AbortPolicy (无法处理新任务抛出异常)
    
             */
            ExecutorService executorservice =
                    new ThreadPoolExecutor(8,12,
                            2000,TimeUnit.MILLISECONDS,
                            new LinkedBlockingDeque<>());
    
            Future future = executorservice.submit(thread1);
            Future future2 = executorservice.submit(thread1);
            Future future3 = executorservice.submit(thread1);
            Future future4 = executorservice.submit(thread1);
            Future future5 = executorservice.submit(thread1);
            future.get();
            future2.get();
            future3.get();
            future4.get();
            future5.get();
    
            //关闭线程池
            executorservice.shutdown();
        }
    }

    执行结果:

  • 相关阅读:
    应用运筹学基础:组合优化 (6)
    应用运筹学基础:组合优化 (5)
    应用运筹学基础:组合优化 (4)
    应用运筹学基础:组合优化 (3)
    应用运筹学基础:组合优化 (2)
    应用运筹学基础:组合优化 (1)
    应用运筹学基础:线性规划 (5)
    The method of type must override a superclass method报错解决方式
    Json文件出现 Expected value at 1:0 问题的解决方法
    浅析XML和JSON的区别
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/11339685.html
Copyright © 2020-2023  润新知