七叶笔记 » java编程 » 2020全新Java面试题——多线程(三)

2020全新Java面试题——多线程(三)

一、线程池都有哪些状态?

线程池有5种状态:Running、ShutDown、Stop、Tidying、Terminated。

线程池各个状态切换框架图:

1.jpg

(视频教程推荐:java视频)

二、线程池中 submit()和 execute()方法有什么区别?

接收的参数不一样

submit有返回值,而execute没有

submit方便Exception处理

三、在 java 程序中怎么保证多线程的运行安全?

线程安全在三个方面体现:

原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);

可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);

有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。

(相关教程推荐:java入门程序)

四、多线程锁的升级原理是什么?

在Java中,锁共有4种状态,级别从低到高依次为:无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。

锁升级的图示过程:

2.jpg

五、什么是死锁?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

推荐教程:java面试题

相关文章