关键字 synchronized 的作用

2017-11-06  本文已影响0人  做个文艺的程序猿

关键字 synchronized 的作用(个人理解):

多个线程访问同一个类或对象实例时,可以使用 synchronized 关键字锁定该类或对象实例,当某个线程执行到锁定该类或对象实例的代码块时,其他线程将不可以再访问该类或对象实例,直到执行完该代码块,其他线程才可以访问。

有类MyObj ,实例对象 myObj = new MyObj(),多个线程都引用 myObj;

class MyObj {
  public int i = 0;
  public static int j = 0;
  public int add() {
      return i = i + 1;
  }
  public synchronized int add2() {
      return i = i + 1;
  }
  public static int add3() {
      return j = j + 1;
  }
  public synchronized static int add4() {
      return j = j + 1;
  }
}
  1. 在子线程里的run(),使用 synchronized 锁定 myObj
synchronized(myObj){

//执行到这里,其他线程将无法访问myObj,直到执行完改代码块

//myObj.i = myObj.i+1;

//myObj.add(); //跟上面处理达到一样正确的处理效果

}

达到跟上面一样正确的处理效果,还可以直接 调用myObj.add2();因为改方法已经使用了synchronized修饰

  1. 在子线程里的run(),使用 synchronized 锁定 MyObj.class
synchronized(MyObj.class ){

//执行到这里,其他线程将无法访问 MyObj.class  ,直到执行完改代码块

//MyObj.j =  MyObj.j+1;

//MyObj.add3(); //跟上面处理达到一样正确的处理效果

}

达到跟上面一样正确的处理效果,还可以直接 调用MyObj.add4();因为改方法已经使用了synchronized修饰

上一篇 下一篇

猜你喜欢

热点阅读