谈谈你对锁的理解?死锁?

谈谈你对锁的理解?

锁是指在并发编程中,为了保障多线程在同时操作一组资源时的数据一致性,我们需要让多线程排队一个一个的操作此资源,而这个过程就是给资源加锁和释放锁的过程,就好像去公共厕所一样,必须一个一个排队使用,并且在使用时需要锁门和开门一样。

谈谈你对死锁的理解?

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

手动模拟一个死锁?

public class DeadLockExample {
    public static void main(String[] args) {
        //死锁
        deadLock();
    }

    public static void deadLock(){

        Object lock1 = new Object();
        Object lock2 = new Object();

        //线程一拥有lock1 试图获取lock2
        new Thread(() -> {
            synchronized (lock1){
                System.out.println("获取Lock1成功");
                try{
                    TimeUnit.SECONDS.sleep(3);
                }catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //试图获取锁lock2
                synchronized (lock2){
                    //获得当前线程名称
                    System.out.println(Thread.currentThread().getName());
                }
            }
        }).start();

        //线程二拥有lock2 试图获取lock1
        new Thread(() -> {
            synchronized (lock2){
                System.out.println("获取 Lock2 成功");
                try{
                    TimeUnit.SECONDS.sleep(3);
                }catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //试图获取锁lock1
                synchronized (lock1){
                    //获得当前线程名称
                    System.out.println(Thread.currentThread().getName());
                }
            }
        }).start();


    }

}

运行结果:

常见面试题:

(1)谈谈你对锁的理解?

(2)什么是死锁?手动模拟一个死锁?

 参考/好文:

百度百科 -- 死锁

https://baike.baidu.com/item/%E6%AD%BB%E9%94%81/2196938?fr=aladdin

拉钩课程 -- Java面试真题及源码

https://kaiwu.lagou.com/course/courseInfo.htm?courseId=59#/detail/pc?id=1766

猜你喜欢

转载自www.cnblogs.com/liaowenhui/p/12610562.html