java synchronized

2018-07-11  本文已影响21人  jnxc1888
同步锁可以是
class Test1 { 
  String str = new String();
  public void run() { 
     synchronized (str) { 
      }
  } 
}
class Test2 { 
  public void run() { 
     synchronized (this) { 
      }
  } 
}

注:如果不是同一个实例,比如new了两个Test2分别执行run,则锁失效

class Test3 { 
  public static synchronized void increase(){
        i++;
    }
}


synchronized关键字的3种应用方式:

前两个好理解,这边说下修饰代码块:

class Untitled {
    public void show(){
        System.out.println("111");
        synchronized (this) {
            System.out.println("showB..");
        }
        System.out.println("222");
    }
}

以上println输出的顺序是

System.out.println("111");

在同步锁之前,不受影响,被调用时立即执行

System.out.println("222");

在同步锁之后,受影响,触发同步锁之后,会等待得到同步锁之后才会执行到

即:

111
//等待获得同步锁...
showB..
222

synchronized使用的几个重要概念

Java并发编程 -- synchronized保证线程安全的原理
java synchronized(同步代码块)


mac 编译执行java文件

javac test.java
java test
上一篇 下一篇

猜你喜欢

热点阅读