钉钉为什么会有多个线程同时获取到锁?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);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。