线程常见面试题


1.线程和进程有什么区别?

进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程,但一个进程一般有多个线程。
进程在运行过程中,需要拥有独立的内存单元,否则如果申请不到,就会挂起。而多个线程能共享内存资源,这样就能降低运行的门槛,从而效率更高。
线程是是cpu调度和分派的基本单位,在实际开发过程中,一般是考虑多线程并发。
在这里插入图片描述


2.并行和并发有什么区别

并行:多个任务在计算机中同时执行
并发:多个任务在计算机中交替执行
举例:吃馒头


3.线程创建4种方式?

在这里插入图片描述


4.线程有哪些状态

站在JavaAPI的角度:
1.新建(NEW)
new Thread()
2.可运行状态(RUNABLE)
调用start方法
3.终结状态
run方法中代码执行完毕
新建—>可运行—>终结是不可逆
4.阻塞状态
没有获取锁的线程
当获取锁的线程释放掉锁,重新抢占锁成功—>可运行状态
5.等待状态
获取锁的线程,调用锁对象.wait方法
当其他线程调用锁对象.notify方法唤醒等待状态的线程,重新获取锁成功----->可运行状态
6.有时限的等待
获取锁的线程,调用锁对象.wait(long)方法
当其他线程调用锁对象.notify方法唤醒等待状态的线程,重新获取锁成功----->可运行状态
时间到了重新获取锁成功----->可运行状态
调用线程的sleep(long)方法
时间到了----->可运行状态
在这里插入图片描述


5.为什么要使用线程池?

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程
池可以进行统一的分配,调优和监控。


6.线程池的构造方法里几个参数的作用分别都是什么?

ThreadPoolExecutor构造方法中的七个参数:
corePoolSize 核心线程数目 - 池中会保留的最多线程数
maximumPoolSize 最大线程数目 - 核心线程+救急线程的最大数目
keepAliveTime 生存时间 - 救急线程的生存时间,生存时间内没有新任务,此线程资源会释放
unit 时间单位 - 救急线程的生存时间单位,如秒、毫秒等
work

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值