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){

            }
     }
}

 

posted @ 2020-03-24 15:48  jason47  阅读(138)  评论(0)    收藏  举报