创建线程的三种方式
- 通过继承Thread类创建线程。
- 实现Runnable接口创建线程类。
- 通过callable和future接口创建线程。
Java获取多线程的返回值
- 主线程等待
- 使用Thread的join阻塞当前线程等待
- 实现callable接口
线程池创建方式
- newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收则新建线程。
- newFiledThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
- newSceduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
- newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO)执行
线程池参数有哪些
- corePoolSize 核心线程大小。
- maximumPoolSize 线程池最大线程数量。
- keepAliveTime 空闲线程存活时间。
- unit 空间线程存活时间。
- workQueue 工作队列。
- threadFactory线程工厂。
- handler 拒绝策略。
线程池拒绝策略
- ThreadPoolExecutor.AbortPoliy:丢弃任务并抛出rejectedExecutionException异常。 默认!
- ThreadPoolExecutor.DiscardPoliy:丢弃任务,不抛出异常。
- ThreadPoolExecutor.DiscardOldestPoliy:丢弃队列最前面的任务,重新提交被拒绝的任务。
- ThreadPoolExecutor.CallerRunsPoliy:由调用线程处理该任务。