java多线程锁面试题有哪些?java多线程锁面试题分享

很多人想进入java行业,可是进行java行业也不是那么容易的,首先就要学会java,其次还要通过java面试官的考核,那java多线程锁面试题有哪些?下面来我们就来给大家讲解一下java多线程锁面试题。

java多线程锁面试题.jpg

1.多线程锁的升级原理是什么?

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

2.什么是死锁?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。是操作系统层面的一个错误,是进程死锁的简称,最早在 1965 年由 Dijkstra 在研究银行家算法时提出的,它是计算机操作系统乃至整个并发程序设计领域最难处理的问题之一。

3.什么是乐观锁和悲观锁?

(1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。

(2)悲观锁:还是像它的名字一样,对于并发间操作产生的线程安全问题持悲观状态,悲观锁认为竞争总是会发生,因此每次对某资源进行操作时,都会持有一个独占的锁,就像 synchronized,不管三七二十一,直接上了锁就操作资源了。

4.死锁的发生原因和怎么避免

死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。如果没有外部干预,线程会一直阻塞无法往下执行,这些一直处于相互等待资源的线程就称为死锁线程。

导致死锁的条件有四个,也就是这四个条件同时满足就会产生死锁。

(1)互斥条件,共享资源 X 和 Y 只能被一个线程占用;

(2)请求和保持条件,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;

(3)不可抢占条件,其他线程不能强行抢占线程 T1 占有的资源;

(4)循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。

按照死锁发生的四个条件,只需要破坏其中的任何一个,就可以解决,但是,互斥条件是没办法破坏的,因为这是互斥锁的基本约束,其他三方条件都有办法来破坏:

(1)设置超时时间,超时可以退出,防止死锁;

(2)降低锁的使用粒度,尽量不要几个功能用同一把锁;

(3)我们可以一次性申请所有的资源,这样就不存在等待了;

Java线程锁的相关问题是java重点,在面试中肯定会问这些题目,因此建议大家平时多看这类题目,不懂的要及时请教别人解决问题!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。

推荐阅读:

java线程池大小多少才合适?java线程池有哪些?

学java看什么网课好?怎样学好java网课?

redis的分布式锁有什么作用?redis分布式锁如何实现?