synchronized方法使用注意
代码如下:
public class Demo{ public synchronized void m1(){ } public synchronized void m2(){ } }
存在两个问题
1. 多个线程分别访问m1()和m2()时是不能并行的。因为访问的锁是对象this。就算加上static也同样。
2. 如果在m1里访问m2,那就直接死锁了,因为是同一个锁,m2需要等锁退出才能被执行,此时m1又等在了m2上。
解决方法(希望有更好的)
public class Demo{ public Object o1 = new Object(); public Object o2 = new Object(); public void m1(){ synchronized(o1){ } } public void m2(){ synchronized(o2){ } } }