面试之多线程

171 阅读3分钟

1.并发和并行的区别?
并发是指多个事件在同一个时间段同时执行;
并行是指多个事件在同一时刻同时执行。

2.线程和进程的区别?
进程是执行中的一个程序,一个进程可能需要多个线程为其服务;
线程是cpu最小的执行单元。

3.守护线程是什么?
守护线程是程序运行时在后台提供通用服务的线程。

4.创建线程有哪几种方式?
继承Thread类;
实现Runnable接口;
实现Callable接口;

5.说一下 runnable 和 callable 有什么区别?
runnable没有返回值,callable有返回值;
runnable不会抛出异常,callable会抛出异常。

6.线程有哪些状态?
new
Runnable
terminated
wait
timed_wait
blocked

7.sleep() 和 wait() 有什么区别?
sleep()是Thread类里的方法,wait()是Object里的方法;
sleep()不会释放锁,wait()会释放锁;
sleep()定时时间到了以后会自动唤醒,wait()只能通过nofity()或notifyAll()唤醒;
sleep()可以在任何地方使用,wait只能在同步代码块或者同步方法里使用。

8.notify()和 notifyAll()有什么区别?
notify()只能唤醒当前线程;
nofify()能唤醒所有wait中的线程

9.线程的 run() 和 start() 有什么区别?
run是Thread类里面的一个普通方法,不能开启新的线程;start可以开启新的线程

10.创建线程池有哪几种方式?
常用的有五种:
newFixedThreadPool:固定线程数的线程池;
newCachedThreadPool:可缓存线程的线程池;
newSingleThreadPlool:单线程的线程池;
newScheduleThreadPool:周期性执行的线程池;
SingleThreadScheduledExecutor:ScheduledThreadPool的特例

11.线程池都有哪些状态?
Running
shutdown
stop
tidying
terminated

12.线程池中 submit() 和 execute() 方法有什么区别?
submit可以提交runable和callable类型的任务,有返回值;
execute只能提交runable类型的任务,无返回值。

13.在 Java 程序中怎么保证多线程的运行安全?


14.多线程中 synchronized 锁升级的原理是什么?
每个锁对象的对象头中都维护了一个线程id,当处于无锁状态时,线程id为null,当有线程来获取锁时,升级为偏向锁,并记录线程id,当有线程再次获取锁时,比较下该线程的线程id是否等于对象头中维护的线程id,如果相等,直接获取该锁,如果不相等,锁升级为轻量级锁,当有多个线程同时再去获取锁时,通过CAS自旋,当自旋到一定的次数后,升级为重量级锁。

15.什么是死锁?
多个线程相互等待,无法推进的状态

16.怎么防止死锁?
锁自测
顺序获取锁
设置超时时间

17.说一下 synchronized 底层实现原理?
通过monitor对象,monitorenter加锁,monitorexit解锁

18.synchronized 和 volatile 的区别是什么?
synchronized用来修饰方法和代码块,volatile用来修饰变量
synchronized对变量具有原子性和可见性,volatile只有可见性
synchronized可能会造成线程的阻塞,volatile不会

19.synchronized 和 Lock 有什么区别?
synchronized是jvm的方法,lock是java的api
synchronized不可以判断是否获取到锁,lock可以判断是否获取到了锁
synchronized会自动解锁和释放锁,lock不会自动解锁和释放锁
synchronized修饰的方法抛出异常后会释放锁,lock需要手动释放锁,所以一般将锁的释放放在finally中执行

20.ThreadLocal 是什么?有哪些使用场景?

21.synchronized 和 ReentrantLock 区别是什么?
ReentrantLock 可以对获取锁的等待时间进行设置,这样就避免了死锁发生
ReentrantLock 可以获取各种锁的信息
ReentrantLock 可以灵活的实现多路通知
二者的锁机制其实也是不一样的,ReentrantLock 底层调用的是 Unsafe的park 方法加锁,synchronized 操作的应该是对象头中的 mark word

22.说一下 atomic 的原理?

待更新。。。。。。

主要为了巩固基础,加深记忆,没有涉及过多深入的知识,欢迎讨论和提问。