使用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);
                }
相关推荐
雨季6669 小时前
构建 OpenHarmony 简易文字行数统计器:用字符串分割实现纯文本结构感知
开发语言·前端·javascript·flutter·ui·dart
雨季6669 小时前
Flutter 三端应用实战:OpenHarmony 简易倒序文本查看器开发指南
开发语言·javascript·flutter·ui
小北方城市网9 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
进击的小头9 小时前
行为型模式:策略模式的C语言实战指南
c语言·开发语言·策略模式
天马37989 小时前
Canvas 倾斜矩形绘制波浪效果
开发语言·前端·javascript
六义义10 小时前
java基础十二
java·数据结构·算法
Tansmjs10 小时前
C++与GPU计算(CUDA)
开发语言·c++·算法
qx0910 小时前
esm模块与commonjs模块相互调用的方法
开发语言·前端·javascript
Suchadar10 小时前
if判断语句——Python
开发语言·python
毕设源码-钟学长10 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端