扫码关注官方订阅号
视频中说尽量不要用字符串常量作为竞争锁,但不明白为什么
人生最曼妙的风景,竟是内心的淡定与从容!
应该是为了避免下面这种情况
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参数问题
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
应该是为了避免下面这种情况
1、你说的应该是同步代码块(synchronized 关键字 ),这是关于怎么选择合适的锁对象问题,建议你别一下子搞得太深了,通常都是用this作为锁对象,大部分场景都能使用;
2、尽量不要用字符串常量作为竞争锁,简单地说,就是那种方式不能实现线程同步,反而造成同步阻塞;
3、如果你确实想上来一下子就深究,推荐几个链接给你参考:
关于synchronized一个字符串的问题
关于synchronized参数问题