公平、非公平锁、可重复锁、自旋锁、死锁

复制代码
(无语死了,这破显示字体,一直是小的)

synchronized和lock默认是非公平锁,为了优化速度假如:

A线程需要3s执行完毕,B线程需要1H,肯定先执行A。

lock只需要在构造方法传入true就是公平锁

复制代码
Lock lock=new ReentrantLock(true)

可重复锁则是在锁里面还可以再获取锁(就是递归思想),依次解锁释放

自旋锁就有点流弊了,通过对锁的判断状态,进行自旋:(我也不知道为啥,我用自己一直实现不了,用原子类就可以)

java 复制代码
package com.quxiao.entity;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

public class MyLock {
    AtomicInteger atomicInteger = new AtomicInteger();

    public void lock() {
        //上一个取到锁,赋值为1,释放锁时调用unlock,赋值为0,结束下一个线程的自旋
        while (!atomicInteger.compareAndSet(0, 1)) {

        }
    }

    public void unlock() {
        //释放锁
        atomicInteger.compareAndSet(1, 0);
    }
}

死锁:A等B,B等A(好凄凉,哈哈哈哈哈哈)

java 复制代码
package com.quxiao.controller;


import com.quxiao.entity.MyLock;

import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @program: package1
 * @author: quxiao
 * @create: 2023-09-27 15:22
 **/
public class t3 {
    public static void main(String[] args) {
        final String a = "1";
        final String b = "2";
        new Thread(() -> {
            try {
                new t(a, b);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }, "A").start();
        new Thread(() -> {
            try {
                new t(b, a);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }, "B").start();
    }

    static class t {

        public t(String a, String b) throws InterruptedException {
            synchronized (a) {
                System.out.println(Thread.currentThread().getName() + "a");
                TimeUnit.SECONDS.sleep(2);
                synchronized (b) {
                    System.out.println(Thread.currentThread().getName() + "b");
                }
            }
        }

    }
}

排查办法:

控制台查看进程:

jps -l

然后使用jstack 进程号

相关推荐
星云API技术支持33 分钟前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
niucloud-admin1 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
海宇AI2 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
xiangyun612 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun612 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
cfm_29143 小时前
单例模式详解
java
我叫张土豆3 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能
白远山4 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
海南java第二人4 小时前
从诞生到回收:JVM对象生命周期与垃圾回收全链路解析
java
SL_staff4 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈