问题一:为啥在代码中直接写synchronized(new Object())是没效果的,两个线程还是会并发执行。
必须要先定义一个实例变量 Object obj = new Object();然后再synchronized(obj)这样却可以,这是为什么?问题二:对于字符串,为什么不用提前定义String s = "abc",而是直接用就可以了,即synchronized("abc")这样。
这又是为什么?谢谢

解决方案 »

  1.   

    synchronized(new Object())关键是锁的是不是“同一个”对象。
      

  2.   

    同意
    你每次都new一个新对象,也就是每个线程竞争的资源不是同一个资源,跟没锁一样。
    synchronized("abc")锁得是"abc"这个对象。lz没明白synchronized到底是什么意思。建议查下相应资料。
      

  3.   

    synchronized(new Object()),每一次都重新new了一个对象,没有锁住同一个对象,当然是不行的。
    String s = "abc",就是在定义一个对象。
      

  4.   

    那个new Object 大家说的对。
    “abc”的话其实也是个对象,在堆中存在,只是没有具体引用指向他。
      

  5.   

    synchronized(new Object())相当于没有写。。完全没有同步的效果
      

  6.   

    synchronized(new Object())这样写不行的,你要是一个静态的对象