【2019春招准备:1.线程池、线程池参数】

参考 https://www.cnblogs.com/zhaoyan001/p/7049627.html

0. Executor框架

在这里插入图片描述
Executor框架包括:

  • 线程池
  • Executor
  • Executors
  • ExecutorService
  • CompletionService
  • Future
  • Callable

异步执行框架
任务的提交过程和执行过程解耦开发,基于生产者-消费者模式

1. java原生线程池:

有4种,都是在ThreadPoolExecutor的方法上面封装的:

  • FixedThreadPool
  • CachedThreadPool
  • SingleThreadExecutor
  • ScheduledThreadPool
ExecutorService service = Executors.newFixedThreadPool(2);

		// 创建线程对象
		MyRunnable myRunnable = new MyRunnable();
		Thread thread = new Thread(myRunnable);

		// 以前是直接thread.start()
		// 现在是线程池写法:线程池submit线程
		Future<?> future = service.submit(thread);
		service.submit(thread);
		service.submit(thread);

		Thread.sleep(5000);
		System.out.println(future);// java.util.concurrent.FutureTask@55f96302

		service.shutdown();

2. 原始接口----ThreadPoolExecutor

在这里插入图片描述

para含义
corePoolSize线程池核心线程数
maximumPoolSize线程池最大数
keepAliveTime空闲线程存活时间
unit时间单位
workQueue线程池所使用的缓冲队列
threadFactory线程池创建线程使用的工厂
handler线程池对拒绝任务的处理策略

3. Executors

提供了一系列静态工厂方法用于创建各种线程池

  • newFixedThreadPool:创建可重用且固定线程数的线程池,如果线程池中的所有线程都处于活动状态,此时再提交任务就在队列中等待,直到有可用线程;如果线程池中的某个线程由于异常而结束时,线程池就会再补充一条新线程。
  • newSingleThreadExecutor:创建一个单线程的Executor,如果该线程因为异常而结束就新建一条线程来继续执行后续的任务
  • newScheduledThreadPool:创建一个可延迟执行或定期执行的线程池
  • newCachedThreadPool:创建可缓存的线程池,如果线程池中的线程在60秒未被使用就将被移除,在执行新的任务时,当线程池中有之前创建的可用线程就重用可用线程,否则就新建一条线程

【补充】

BlockingQueue阻塞队列
1.继承:queue的泛型
2.添加:add/offer 都是返回是否成功,限长用offer;put:如果满了 该方法会阻塞;offer可以设定添加时间
3.取出:take/poll take如果没有会阻塞直到有,poll可以设定时间调用他take
4.其他功能:移除指定的值,显示剩余空间,是否有这个值,将全部元素移除到一个collection
5.常见子类型:ArrayBlockingQueue,LinkedBlockingQueue,DelayQueue


版权声明:本文为qq_33907408原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。