写作与程序

java初入多线程11

2017-10-21  本文已影响8人  胖琪的升级之路

核心线程池的内部实现机制。

  1. 阿里巴巴 code检验推荐自己实现线程池的创建。不是使用Executors的创建方法。
  2. ThreadPoolExecutor 类的封装实现。
  //参数最多的构造方法
  public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)
  1. 详细介绍 队列的使用workQueue 。
线程池的任务调度逻辑

超负载了怎么办:拒绝策略

  1. ThreadPoolExecutor 的最后一个参数指定了拒绝策略,系统中有四种拒绝策略
    拒绝策略
public class RejectedThreadPoolDemo {

        public static class MyTask implements Runnable{

            @Override
            public void run() {
                System.out.println(System.currentTimeMillis() + " :Thread ID : " + Thread.currentThread().getId());
                
                try {
                    Thread.sleep(100);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
            
            
        }
        public static void main(String[] args) throws Exception {
            MyTask task = new MyTask() ;
            // 定了一个线程池  自定义的  并且自定了拒绝策略
            ExecutorService es  =new ThreadPoolExecutor(5, 5, 0l, TimeUnit.MICROSECONDS, new LinkedBlockingQueue<>(),
                    Executors.defaultThreadFactory(),new RejectedExecutionHandler() {
                        
                        @Override
                        public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                            System.out.println(r.toString() + " is discard ");
                        }
                    });
            
            for(int i = 0 ; i < 5 ; i++) {
                es.submit(task);
                Thread.sleep(10);
            }
            
      }
    
}
上一篇下一篇

猜你喜欢

热点阅读