创建线程的几种方式?线程池的七大参数以及作用?
创建方式:继承thread类;实现Runnable接口 或者实现callable接口 ;通过线程池和辅助创建线程池的工具类。
1.核心线程数:就是线程池维护的最小线程数,当线程处于空闲,一段时间以后线程就会销毁。除非设置AllowCoreThreadTimeOut。
2.最大线程数:线程池不会无线创建线程,线程池的最大个数,就是由最大线程数来确定。
3.线程工厂:就是创建线程的工厂,可以用来定义线程名 和判断是否是daemon线程等等。
4.工作队列:新任务提交后会进入工作队列中,只有任务调用时再从队列中取出;
jdk提供了四种队列:
基于数组的有界阻塞队列;基于链表的无界阻塞队列;一个也不缓存的阻塞队列;具有优先级的无界阻塞队列。
5.存活时间:当线程处于空闲,指定时间后就会被销毁,这个指定时间就是线程的存活时间;
6.时间单位: 存活时间的计量单位。
7.拒绝策略:当线程数量达到最大,任务数量也达到最大,有新任务进来时就会执行拒绝策略;
- jdk提供了四种拒绝策略:
- AbortPolicy 丢弃任务并抛出异常
- DiscardPolicy:直接丢弃任务
- CallrunsPolicy:调用当前线程直接执行被拒绝任务的run()方法。
- DiscardoldestPolicy:丢弃队列中最先进入的线程,尝试把拒绝任务加入到队列中。
- 线程的状态有哪些?