0
点赞
收藏
分享

微信扫一扫

Java多线程Day04-多线程之synchronized关键字

synchronized关键字

synchronized原理synchronized基本规则synchronized方法synchronized代码块全局锁实例锁

synchronized原理

  • Java中,每个对象有且仅有一个同步锁.即同步锁是依赖对象而存在的
  • 调用某个对象的synchronized方法时,就获取了该对象的同步锁
  • 不同线程之间对同步锁的访问是互斥的:
  • 某个时间点,对象的同步锁只能被一个线程获取
  • 通过使用同步锁,就可以在多线程中,实现对象或者方法的互斥访问

synchronized基本规则

  • 第一条: 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其余线程对该对象的该synchronized方法或者该synchronized代码块的访问将被阻塞
  • 第二条: 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其余线程可以访问该对象的非同步代码块
  • 第三条: 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其余线程对该对象的其余synchronized方法或者其余synchronized代码块的访问将被阻塞

synchronized方法

  • 用synchronized修饰的方法叫作synchronized方法
public synchronized void runs() {
...
}

synchronized代码块

  • 用synchronized修饰的代码块叫作synchronized代码块
public void runs() {
synchronized (this) {
...
}
}
  • synchronized代码块中的this指代当前对象,即获取当前对象的同步锁. 也可以换成其余对象
  • synchronized代码块可以更精确控制冲突访问区域,使用效率更高

全局锁

  • 全局锁:
  • 全局锁是指类的锁
  • 无论实例化多少个对象,线程都共享该锁
  • 全局锁对象的就是static synchronized. 或者是锁在该类的class或者classloader对象上

实例锁

  • 实例锁:
  • 锁在一个实例对象上面
  • 如果该类是单例,那么该锁也具有全局锁的概念
  • 实例锁对应的就是synchronized关键字
举报

相关推荐

0 条评论