项目中有个地方需要同步,service中的方法会传入一个 orderId ,用这个orderId作为锁对象,感觉有点问题,认为不会同步.
public void print(String id){
try {
synchronized (orderId) {
Thread.sleep(5000);
System.out.println(orderId+" " +System.currentTimeMillis());
}
} catch (Exception e) {
e.printStackTrace();
}
}
但是自己在测试的时候,都传入100,两个线程时间差在5秒.
求高手解惑.
string 是不可变类 像你这种写法 每次加锁的对象都不一样 所以相当于没用了
引用来自“Minute”的评论
加个intern() 就可以同步了