美文网首页
Java-synchronized

Java-synchronized

作者: 权游一里 | 来源:发表于2018-05-21 17:28 被阅读0次

synchronized是java的关键字(内置的),Lock是java的接口。两者都实现了对于临界资源的同步互斥访问,各有优缺点。

1.简介

synchronized的使用对象主要有两大类:

  • 静态:类、类方法。
  • 非静态:对象,对象方法。

当多个线程访问了同一个被synchronized修饰的内容时,只有最先获取该内容的锁,其他线程只能等待该线程释放锁(等待或结束)后才能获取该内容的锁。也就是该内容在一段时间内只能被一个线程所拥有。

线程释放锁的情况有三种:

  • 正常执行完被锁的内容,线程释放锁
  • 执行被锁的内容时发生异常,JVM释放锁
  • 进入等待状态(调用wait()方法等),线程释放锁

2.使用

2.1 作用于对象

//代码块
synchronized(this){
  //...
}

//指定对象
synchronized(obj){
  //...
}

//特殊对象,没有明确对象时
private byte[] lock = new byte[0];//特殊对象
......
synchronized(lock){
  //...
}

2.2 作用于方法

//对象方法
public synchronized void method(){
  //...
}
或
public synchronized void method(){
  synchronized(this){
    //...
  }
}

//静态方法
public synchronized static void method(){
  //...
}

2.3 作用于类

synchronized(Clazz.class){
  //...
}

注意

  • synchronized无法被继承,被重写的方法无法同步,父类的方法是同步的。
  • 修饰对象或对象方法时,只在该对象同步,该类的所有对象之间不保持同步。

相关文章

  • Java-synchronized

    synchronized是java的关键字(内置的),Lock是java的接口。两者都实现了对于临界资源的同步互斥...

  • Java-synchronized

    从代码入手,先看下代码 注意这里我们加锁的方式是同步代码块,然后反编译下class文件,看一下get方法 这里我们...

  • java-synchronized记录

    总结:所有的 synchronized 都是作用在对象上的。 参考 https://juejin.im/post/...

  • java-synchronized 理解

    同步代码块里面是原子操作,synchronized保护原子操作防止被打断,o代表是当前对象,synchronize...

  • [Java]重学Java-synchronized

    synchronized的作用 synchronized作为Java提供的锁关键字,在单进程的时候可以提供互斥的功...

  • 深入理解Java-synchronized关键字

    理解Java中的synchronized关键字 问题思考:我们可以带着问题理解 synchronized 1.理解...

网友评论

      本文标题:Java-synchronized

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