面试八股文---多线程

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方法是用来启动线程的,只执行一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值