猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
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(); } }
0
0
0
慕少森
1、你说的应该是同步代码块(synchronized 关键字 ),这是关于怎么选择合适的锁对象问题,建议你别一下子搞得太深了,通常都是用this作为锁对象,大部分场景都能使用;2、尽量不要用字符串常量作为竞争锁,简单地说,就是那种方式不能实现线程同步,反而造成同步阻塞;3、如果你确实想上来一下子就深究,推荐几个链接给你参考:关于synchronized一个字符串的问题关于synchronized参数问题
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续