Java 多线程中 用字符串常量作为竞争锁 会有什么影响

视频中说尽量不要用字符串常量作为竞争锁,但不明白为什么

智慧大石
浏览 621回答 2
2回答

MM们

应该是为了避免下面这种情况 public class Test { static final String lock = "this is a lock"; static final String lock1 = "this is a lock"; public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { @Override public void run() { synchronized (lock) { System.out.println("locked ..."); try { Thread.sleep(10000); } catch (InterruptedException e) { } System.out.println("unlocked ..."); } } }).start(); Thread.sleep(1000); new Thread(new Runnable() { @Override public void run() { synchronized (lock1) { System.out.println("locked lock1 ..."); System.out.println("unlocked lock1 ..."); } } }).start(); } }

慕少森

1、你说的应该是同步代码块(synchronized 关键字 ),这是关于怎么选择合适的锁对象问题,建议你别一下子搞得太深了,通常都是用this作为锁对象,大部分场景都能使用;2、尽量不要用字符串常量作为竞争锁,简单地说,就是那种方式不能实现线程同步,反而造成同步阻塞;3、如果你确实想上来一下子就深究,推荐几个链接给你参考:关于synchronized一个字符串的问题关于synchronized参数问题
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java