美文网首页
关键字 synchronized 的作用

关键字 synchronized 的作用

作者: 做个文艺的程序猿 | 来源:发表于2017-11-06 18:23 被阅读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修饰

    相关文章

      网友评论

          本文标题:关键字 synchronized 的作用

          本文链接:https://www.haomeiwen.com/subject/wlzlmxtx.html