问题一:为啥在代码中直接写synchronized(new Object())是没效果的,两个线程还是会并发执行。
必须要先定义一个实例变量 Object obj = new Object();然后再synchronized(obj)这样却可以,这是为什么?问题二:对于字符串,为什么不用提前定义String s = "abc",而是直接用就可以了,即synchronized("abc")这样。
这又是为什么?谢谢
必须要先定义一个实例变量 Object obj = new Object();然后再synchronized(obj)这样却可以,这是为什么?问题二:对于字符串,为什么不用提前定义String s = "abc",而是直接用就可以了,即synchronized("abc")这样。
这又是为什么?谢谢
你每次都new一个新对象,也就是每个线程竞争的资源不是同一个资源,跟没锁一样。
synchronized("abc")锁得是"abc"这个对象。lz没明白synchronized到底是什么意思。建议查下相应资料。
String s = "abc",就是在定义一个对象。
“abc”的话其实也是个对象,在堆中存在,只是没有具体引用指向他。