使用LockSupport异常没有释放锁,导致死锁

##死锁代码

复制代码
public class LockSupportThreadTest {

    public static void main(String[] args) {
        LockSupportThreadTest threadTest = new LockSupportThreadTest();
        Thread yym_user_thread2 = new Thread() {
            public void run() {
                LockSupport.park();
                System.out.println("yym_user_thread2");
                threadTest.resources(2);
            }
        };

        Thread yym_user_thread1 = new Thread() {
            public void run() {
                System.out.println("yym_user_thread1");
                threadTest.resources(0);
                LockSupport.unpark(yym_user_thread2);
            }
        };
        yym_user_thread1.setName("yym_user_thread1");
        yym_user_thread1.start();
        //
        Thread.yield();Thread.yield();Thread.yield();
        Thread.yield();Thread.yield();Thread.yield();
        yym_user_thread2.setName("yym_user_thread2");
        yym_user_thread2.start();
    }

    public void resources(int number) {
        int i = 10/number;
        System.out.println("resources"+i);
    }

}

##jstack查看死锁原因,yym_user_thread2没有其他线程唤醒

java 复制代码
"yym_user_thread2" #27 prio=5 os_prio=0 cpu=0.00ms elapsed=96.06s tid=0x0000022b79380000 nid=0x35784 waiting on condition  [0x00000070d84ff000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@11.0.19/Native Method)
        at java.util.concurrent.locks.LockSupport.park(java.base@11.0.19/LockSupport.java:323)
        at com.newland.mi.thread.LockSupportThreadTest$1.run(LockSupportThreadTest.java:11)

##以上死锁产生原因,还是由于代码书写不规范产生。在finally释放锁

java 复制代码
try {
                    threadTest.resources(0);
                }finally {
                    LockSupport.unpark(yym_user_thread2);
                }
相关推荐
weixin_440784115 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城5 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
leoZ2315 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
XR1234567885 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟5 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君6 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1236 小时前
SpringDAO的用法
java·开发语言·数据库
happymagic6 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
格林威8 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
都叫我大帅哥9 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java