(新葡京娱乐场) Java 多线程中 用字符串常量作为竞争锁 会有什么影响
澳门新葡京官网
澳门新葡京官网
当前位置 : 澳门新葡京官网 > 新葡京娱乐场

(新葡京娱乐场) Java 多线程中 用字符串常量作为竞争锁 会有什么影响

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

应该是为了避免下面这种情况

public class Test {
    static final String lock = "this is a lock";
    static final String lock1 = "this is a lock";

    public static void mainString[] args throws InterruptedException {
        new Threadnew Runnable {
            @Override
            public void run {
                synchronized lock {
                    System.out.println"locked ...";
                    try {
                        Thread.sleep10000;
                    } catch InterruptedException e {
                    }
                    System.out.println"unlocked ...";
                }
            }
        }.start;
        Thread.sleep1000;
        new Threadnew Runnable {
            @Override
            public void run {
                synchronized lock1 {
                    System.out.println"locked lock1 ...";
                    System.out.println"unlocked lock1 ...";
                }
            }
        }.start;
    }
}
1

这样的话,两个同步块锁的其实是同一个字符串,也就是说,必须得等lock释放之后才能执行lock1块吗?

原文海 · 2016年12月23日

展开评论

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

栏目列表

广告位

澳门新葡京官网