synchronized object & synchronized method

来源:互联网 发布:什么叫域名过期 编辑:程序博客网 时间:2024/05/23 01:57

多线程需要一定的“计算机”式的思维!

synchronized method 情况下,当有任何线程调用这个 method 时,其他线程都无法访问这个实例(instance)中所有声明为 synchronized 的 method。

而 synchronized object 就灵活很多,因为它只限制了 synchronized(object){ ... } 中的这部分代码只能由一个线程访问。也就是说尽管有两个线程访问同一个实例 (instance),下面的代码依然可以保证正常工作:


public class ThreadSafe{

  public void method1(){
    synchorinzed(object1){
      .....
    }
  }

  public void method2(){
    synchronized(object2){
      .....
    }
  }
}


当有两个线程同时分别访问 method1 和 method2,两个线程都不会被阻塞,效率就比使用 synchronized method 高多了。
但如果有两个线程想同时访问 method2,则同一时间只能有一个线程使用 synchronized(object2){ ... } 里的代码。

有一点千万要记住,synchronized object 与 synchronized method 这两种方法是针对同一个实例(instance),而不是类!!这点一定要搞清楚!
原创粉丝点击