多线程相关面试考点

1并行和并发有什么区别?
并行是作用于多核cpu中,如多开软件,同时执行,并发指交替执行,多线程在短时间内交替执行
在于并行是同时执行,并发是交替执行

2.线程和进程的区别?
在电脑中打开一个软件,这个在运行的软件就是一个进程, 在这个进程中会有1个或多个线程在运行
即线程是cup最小的调度单位, 一个进程包含多个线程
3.守护线程是什么?
守护线程是是一个特殊的线程,是jvm中所有的非守护线程的保姆,例如GC垃圾回收线程就是一个守护线程
生命周期是,jvm中没有线程后和jVM一起销毁

4.创建线程有哪几种方式?
继承Thread类,重写run方法, 使用Thread类的start()方法执行
实现Runnable接口,重写run方法
实现callable 接口,重写 call()方法
通过线程池创建线程

5.说一下 runnable 和 callable 有什么区别?

runnable没有返回值,重写run方法, 开启线程是实现thread对应的构造器执行start方法
callable 有返回值,重写call()方法,开启线程需要FutureTask包装后才可以使用thread对应的构造器执行start方法
callable 可以抛异常,runnable不行

6.线程有哪些状态?

创建状态-》就绪状态-》运行状态->堵塞状态->死亡状态

7.sleep() 和 wait() 有什么区别?
sleep是thread的方法,进入休眠状态,不释放锁,在时间到了后,继续执行
wait是object的方法,是放弃持有的锁,进入到等待唤醒状态

8.notify()和 notifyAll()有什么区别?

都是唤醒在等待的线程
notify() 随机唤醒一个在等待的线程,需要在同一个线程中, notifyAll()唤醒所有在等待的线程,
9.线程的 run()和 start()有什么区别?
run方法为普通方法,在其中书写的代码会在start方法被调用时执行,直接调用run方法,
start()是线程的启动者。
run()是线程任务的运行者。

10.创建线程池有哪几种方式?
1 newCachedThreadPool创建一个可缓存线程池
2 newFixedThreadPool Executors.newFixedThreadPool(3);创建一个定长线程池
3 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行
4 newSingleThreadExecutor Executors.newSingleThreadExecutor() 创建一个单线程化的线程池,

11.线程池都有哪些状态?
线程池的5种状态:
Running、线程池被一旦被创建,就处于RUNNING状态,能够接收新任务
ShutDown、不接收新任务,但能处理已添加的任务
Stop、不接收新任务,不处理已添加的任务,并且会中断正在处理的任务
Tidying、当所有的任务已终止,ctl记录的”任务数量”为0,线程池会变为TIDYING状态
Terminated。线程池彻底终止,就变成TERMINATED状态。

12.线程池中 submit()和 execute()方法有什么区别?
execute() 参数 Runnable ;submit() 参数 (Runnable) 或 (Runnable 和 结果 T) 或 (Callable)
execute() 没有返回值;而 submit() 有返回值
submit() 的返回值 Future 调用get方法时,可以捕获处理异常

13.在 java 程序中怎么保证多线程的运行安全?
原子性:一个或者多个操作在 CPU 执行的过程中不被中断的特性
可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到
有序性:程序执行的顺序按照代码的先后顺序执行
JDK Atomic开头的原子类、synchronized、LOCK,可以解决原子性问题
synchronized、volatile、LOCK,可以解决可见性问题
Happens-Before 规则可以解决有序性问题

14.多线程锁的升级原理是什么?
无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁

15.什么是死锁?
是指多个进程在运行过程中因争夺资源而造成的一种僵局

16.怎么防止死锁?
1、避免一个线程同时获取多个锁
2、避免一个线程同时占用多个资源,尽量保证每个锁只占用一个资源
3、尝试使用定时锁,
17.ThreadLocal 是什么?有哪些使用场景?
ThreadLocal是线程Thread中属性threadLocals的管理者。
在跨越层级携带id时可以使用,spring的声明式事务也有

18.说一下 synchronized 底层实现原理?

19.synchronized 和 volatile 的区别是什么?

20.synchronized 和 Lock 有什么区别?
synchronized 是一个关键字, Lock是一个类
synchronized 是隐式锁, Lock是显式锁,需要手动加锁释放锁
synchronized 不能判断锁的状态, Lock可以判断

21.synchronized 和 ReentrantLock 区别是什么?
Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的
synchronized 是隐式锁, ReenTrantLock是显式锁,需要手动加锁释放锁
synchronized 无法实现公平锁;ReentrantLock 可以满足公平锁,即先等待先获取到锁

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值