重入

作者: 绝对是我没错 | 来源:发表于2018-02-25 09:15 被阅读4次

关于重入的代码举例:

public class Widget{
    public synchronized void doSomething(){
          ...
    }
}
public class LoggingWidget extends Widget{
    public synchronized void doSometing(){
      System.out.println(toString() + ": calling doSomething");  
      super.doSomething();  
    }
}

这里如果调用了子类的doSometing方法,synchronized所使用的锁对象一直是子类对象,super.doSomething()锁对象也是子类对象。
为什么不是父类对象呢?我们来看下再这个例子中我们一般是怎么创建对象和调用方法的:

LoggingWidget lw = new LoggingWidget (); // 这里我们只创建了一个对象,是子类对象
lw.doSomething();

这里有几点原则:
1、synchronized函数,实际是synchronized(this)代码块包裹整个函数的简写,所用的锁就是当前this对象,要验证是否是同一个锁对象,实际我们可以再父类和子类的doSomething()方法中打印出this即可。
2、关于继承和super调用,并不会创建一个父类对象给子类对象去引用。

PS:静态方法同步所用的是class锁,这又是另外一回事

相关文章

  • ReentrantLock 源码分析

    锁的基本概念 可重入锁 Reentrant 就是可重入的意思,如果锁具备可重入性,则称作为可重入锁。像synchr...

  • Java并发编程-重入锁

    章节目录 什么是重入锁 底层实现-如何实现重入 公平与非公平获取锁的区别与底层实现 1.什么是重入锁 1.1 重入...

  • java可重入锁

    可重入概念: java的可重入锁: 可重入锁的一种实现方式: 可重入锁的两种使用例子: 例子1: 例子2: 例子1...

  • Java 可重入锁 公平锁 读写锁

    1.可重入锁 如果锁具备可重入性,则称作为可重入锁。 像synchronized和ReentrantLock都是可...

  • ReentrantLock重入锁

    一、ReentrantLock重入锁 1、ReentrantLock重入锁简介 ReentrantLock可以完全...

  • java.util.concurrent.locks.Reent

    什么是重入锁 重入锁就是指重复进入锁,它表示该锁能够支持一个线程对资源的重复加锁。 重入锁继承与实现关系 重入锁的...

  • Java高并发实战——同步控制工具

    (1)、重入锁(ReentrantLock) 重入锁使用java.util.concurrent.locks.Re...

  • Java多线程 ReentrantLock CAS

    重入锁死 Reentrance Lockout 重入锁死可能会发生在如果一个线程重入一个锁中,ReadWriteL...

  • 重入

    关于重入的代码举例: 这里如果调用了子类的doSometing方法,synchronized所使用的锁对象一直是子...

  • J.U.C-AQS-ReentrantLock

    ReentrantLock(可重入锁)和synchronized区别 可重入性 锁的实现(ReentrantLoc...

网友评论

    本文标题:重入

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