美文网首页
Synchronized详解

Synchronized详解

作者: iMikasa_ | 来源:发表于2021-08-28 10:30 被阅读0次

线程安全的阻塞式解决方案——Synchronized,俗称对象锁,采用互斥的方式让同一时刻最多只有一个线程持有对象锁,其它线程在想获取锁时只能被阻塞住。这样就能保证持有锁的线程能够安全的执行操作有共享资源的代码啦

synchronized原理

在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。
当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。
不同线程对同步锁的访问是互斥的。也就是说,某时间点,对象的同步锁只能被一个线程获取到!通过同步锁,我们就能在多线程中,实现对“对象/方法”的互斥访问。 例如,现在有两个线程A和线程B,它们都会访问“对象obj的同步锁”。假设,在某一时刻,线程A获取到“obj的同步锁”并在执行一些操作;而此时,线程B也企图获取“obj的同步锁” —— 线程B会获取失败,它必须等待,直到线程A释放了“该对象的同步锁”之后线程B才能获取到“obj的同步锁”从而才可以运行。
其实,加锁和释放锁等都是由字节码中管程(monitor)控制的,以后填坑这部分知识。

可以用在的地方

  • 实例方法
  • 实例方法中的代码块
  • 静态方法
  • 静态方法中的代码块

我的理解

synchronized修饰实例方法是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块, 类的两个不同实例就没有这种同步约束;

synchronized修饰实例方法,如果一个线程获得和对象锁,线程在调用其它用synchronized修饰的方法时会直接执行,不会等待继续获取锁 ,这是重入锁

synchronized修饰静态方法对类进行加锁,限制多线程同时访问该类的所有实例

相关文章

  • 多线程使用之-----synchronized/wait/not

    参考文献: java synchronized详解 synchronized 修饰方法 synchronized ...

  • Java基础-Synchronized详解一

    Java中的Synchronized详解 1.Synchronized简介 Synchronized简称同步锁。 ...

  • java基础----Synchronized、Lock的区别与V

    引用了 Lock与synchronized 的区别 详解synchronized与Lock的区别与使用 Java并...

  • Synchronized 原理详解

    title: synchronized原理详解date: 2019-11-27author:...

  • Day26 Synchronized

    synchronized原理详解synchronized内置锁是一种对象锁(锁的是对象而非引用),作用粒度是对象,...

  • Synchronized 详解

    转载https://www.jianshu.com/p/29854dc7bd86面试题:主线程执行10次,子线程接...

  • synchronized 详解

    问题 那到底使用synchronized关键字是不是就是一个监视器? 不懂,理解的话可以向我发邮件gaomengj...

  • synchronized详解

    第一种,锁在方法上,这种很好理解 第二种,锁变量 关于这个锁我一开始理解的是在执行完synchronized代码块...

  • Synchronized 详解

    synchronized关键字采用对代码块/方法体加锁的方式解决Java中多线程访问同一个资源时,引起的资源冲突问...

  • Synchronized详解

    什么是Synchronized,有什么用? Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保...

网友评论

      本文标题:Synchronized详解

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