开发者社区> 问答> 正文

钉钉为什么会有多个线程同时获取到锁?

钉钉为什么会有多个线程同时获取到锁?package org.idle.fish;

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

/*
*/
public class CustomLock {

private static final AtomicReference<Thread> STATE = new AtomicReference<>();

public void lock() {
    // 自旋,直到没有线程持有当前锁
    while (!STATE.compareAndSet(null, Thread.currentThread())) {
    }
    System.out.println(Thread.currentThread().getName() + "获取锁成功");
}

public void unLock() {
    // 释放锁
    STATE.compareAndSet(Thread.currentThread(), null);
    System.out.println(Thread.currentThread().getName() + "解锁成功");
}

}

class Test {
public static void main(String[] args) throws InterruptedException {
CustomLock customLock = new CustomLock();
for (int i = 0; i < 10; i++) {
new Thread(() -> {
customLock.lock();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
customLock.unLock();
}
}).start();
}
TimeUnit.MINUTES.sleep(1);
}
}

展开
收起
真的很搞笑 2024-03-19 16:23:23 26 0
0 条回答
写回答
取消 提交回答
问答标签:
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载