侧边栏壁纸
  • 累计撰写 2,046 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

springboot中使用synchronized加锁无效

大猿本猿
2023-04-07 / 867 阅读 / 138 字

springboot中使用synchronized加锁无效

" "

问题描述

springboot加锁无效,代码如下:

@GetMapping("/api/tt/{lock}")
public String lockTest4(@PathVariable String lock) {
    synchronized (lock) {
      return "Hello";
    }
}

解决方法

synchronized​在web​开发中通常的多线程里是无效的, 你以为锁住了,实质上这段代码是这样的:

ExecutorService threadPool = Executors.newFixedThreadPool(1000);
threadPool.execute(() -> {
    xxxController.lockTest4("lockKey");
});

正确做法

synchronized (lock.intern()) {
    ...
}

#lock是string

String​ 的 intern​ 方法会复用常量池里的对象,所以锁持有的对象是同一个,就不会出现并发操作了。