淘先锋技术网

首页 1 2 3 4 5 6 7

1. 线程的状态有哪些?
NEW 新建
RUNNABLE 就绪
WAITING 等待
TIMED_WAITING 计时等待
BLOCKED 阻塞
TERMINATED 消亡
2. 线程池的创建方式有哪些?
通过线程工具类 Executors创建
通过new ThreadPoolExecutor类创建 ,它有七个参数需要设置,分别是 核心线程数、最大线程数、空闲线程存活时间、存活时间的单位、阻塞队列、线程工厂、拒绝策略
3. 线程池的使用流程是什么?
当需要线程去执行一个任务时,线程池会先判断是否有空闲的核心线程,如果有直接复用;
没有则尝试创建新的核心线程,如果所有的核心线程都已经创建,会先将任务加入到阻塞队列中,等待核心线程空闲了去执行;
如果是无界队列,后续的任务会一直加入到阻塞队列;
如果阻塞队列也满了,此时会创建非核心线程线程执行任务;
如果线程数量也达到设定的最大线程数了,将会触发拒绝策略,一般是丢弃任务并抛出异常
四种拒绝策略:AbortPolicy 丢弃并抛出异常
DiscardPolicy 丢弃不抛出异常
DiscardOldestPolicy 丢弃队列中最老的任务
CallerRunsPolicy 调用任务的run()绕过线程池直接执行(main方法去执行)
4. wait,sleep,notify,notifyAll,run,start方法的作用是什么?
wait是Object类的方法,所有的对象都可以调用,该方法会让当前对象释放锁并进入等待状态,并且不能主动醒来
sleep是Thread类的方法,可以让线程睡眠一段时间,睡眠时不会释放锁,睡眠时间一到会接着执行下面的任务
notify会随机唤醒等待中的对象,前提是需要借助同一个锁对象,notifyAll会唤醒锁上所有的对象
run方法中是线程具体执行的任务,可以重复执行,start方法是用来启动线程的,只执行一次。