zoukankan      html  css  js  c++  java
  • 多线程递归锁 引发的问题

    1.如果只是当前线程自己使用递归锁,没有完全配对上锁解锁,可以正常运行,但如果还有别的线程则会引发问题,最好上锁和解锁配对使用。

    下面例子演示 ,t1线程故意内层不释放锁,引起t2线程阻塞。代码如下:

    public class SynclockDemo {
    
        public static void main(String[ ]args) {
    
            Lock lock = new ReentrantLock();
    
            new Thread(() -> {
    
                try {
                    lock.lock();
                    System.out.println(Thread.currentThread().getName() +" 外层");
                    try {
                        lock.lock();
                        System.out.println(Thread.currentThread().getName() +" 内层");
                    } finally {
                        //故意不释放锁观察t2线程是否正常运行,结果t2线程一直阻塞
                       // lock.unlock();
                    }
                } finally {
                    lock.unlock();
                }
    
            },"t1").start();
    
            new Thread(() -> {
                lock.lock();
                System.out.println(Thread.currentThread().getName() +"外层");
                lock.unlock();
            },"t2").start();
        }
    }

    结果: t2线程一直阻塞,原因t1线程未正常上锁解锁(上锁2次解锁1次)。

    总结:

    必须配对上锁解锁过程,否则会引发各种错误。

  • 相关阅读:
    java 平面上最近两个点之间的距离
    java 选择排序
    java 复制字串算法
    mysql数据库的导入导出
    010editor安装包
    切换使用phpstudy的mysql和本机自带的mysql
    vmware安装kali
    win10,python安装mysql
    php变量等入门
    Wampserver 2.5安装
  • 原文地址:https://www.cnblogs.com/liuyi13535496566/p/15023556.html
Copyright © 2011-2022 走看看