为了账号安全,请及时绑定邮箱和手机立即绑定

synchronized在修饰代码块的时候,括号后面要跟什么啊?

synchronized在修饰代码块的时候,括号后面要跟什么啊?

摇曳的蔷薇 2019-03-06 09:15:03
package basic;public class TestSynchronizedObject {    public static void main(String[] args) {        final TestSynchronizedObject testSynchronizedObject_first = new TestSynchronizedObject();        final TestSynchronizedObject testSynchronizedObject_second = new TestSynchronizedObject();        final MyObject myObject_first = new MyObject();        final MyObject myObject_seconde = new MyObject();        new Thread("线程A") {            @Override            public void run() {                myObject_first.print("线程A");            }        }.start();        new Thread("线程B") {            @Override            public void run() {                myObject_seconde.print("线程B");            }        }.start();    }}class MyObject {    public void print(String str) {        System.out.println("线程" + Thread.currentThread().getName() + "开始执行");        synchronized ("") {            for (int i = 0; i < 10; i++) {                System.out.println(str + " ." + i + ". ");                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                }            }        }        System.out.println("线程" + Thread.currentThread().getName() + "执行结束");    }}//输出结果://线程线程A开始执行//线程A .0. //线程线程B开始执行//线程A .1. //线程A .2. //线程A .3. //线程A .4. //线程A .5. //线程A .6. //线程A .7. //线程A .8. //线程A .9. //线程B .0. //线程线程A执行结束//线程B .1. //线程B .2. //线程B .3. //线程B .4. //线程B .5. //线程B .6. //线程B .7. //线程B .8. //线程B .9. //线程线程B执行结束查阅相关文档,当synchronized修饰代码块的时候,表示线程在执行的时候会将synchronized括号中的对象上锁。(注意这个对象可以是任意类的对象,也可以使用this关键字)。但是我这里明明是两个实例,而且在synchronized修饰代码块的时候,我的括号中明明没有指定在什么对象上使用锁,为什么是这样的打印结果呢?
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

synchronized (lock-object) {

}

括号后面要跟一个对象,这个对象充当锁的作用。

synchronized(""),这里你把一个空字符串当成锁,并因此认为你没有指定锁住哪个对象。

而实际上,空字符串本身就是一个对象。并且,你有两个实例,并把空字符串喂给它们,这两个实例实际上持有的是同一个对象。

  1. 在Java中,全部都是对象, 空字符串也是对象。

  2. 常量字符串,比如空字符串,都放在常量池里,两个实例引用的空字符串实际上就是常量池里的空字符串,是同一个对象。


查看完整回答
反对 回复 2019-04-22
  • 1 回答
  • 0 关注
  • 708 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号