jvms

Java中synchronized的内存理解

China☆狼群 提交于 2020-04-20 18:13:08
synchronized 具有使每个线程依次排队操作共享变量的功能。这种同步机制效率很低,但 synchronized 是其它并发容器实现的基础。 一、锁对象及 synchronized 的使用 synchronized 通过互斥锁(Mutex Lock)来实现,同一时刻,只有获得锁的线程才可以执行锁内的代码。 锁对象分为两种: 实例对象(一个类有多个)和 Class 对象(一个类只有一个)。 不同锁对象之间的代码执行互不干扰,同一个类中加锁方法与不加锁方法执行互不干扰。 使用 synchronized 也有两种方式: 修饰普通方法,锁当前实例对象。修饰静态方法,锁当前类的 Class 对象。 修饰代码块,锁括号中的对象(实例对象或 Class 对象)。 class Xz { // 类锁 public static synchronized void aa() { for ( int i = 0; i < 10; i++ ) { System.out.println( "aaa" ); try { Thread.sleep( 1000 ); } catch (InterruptedException e) { e.printStackTrace(); } } } // 对象锁 public synchronized void bb() { for ( int i = 0; i <