zoukankan      html  css  js  c++  java
  • 多线程之内置锁原理简介

    JAVA提供了一种内置锁的机制来支持原子性,同步代码块。同步代码块分两部分组成:1)一个是作为锁的对象引用2)由这个锁保护的代码块

    注意点:以关键字sync...修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象

    内置锁原理:

    为每个锁分配一个计数器和锁持有者

    当线程请求一个未被占用的锁时,JVM将记下锁的持有者,并且将计数器加1;如果同一个线程再次获取这个锁,者将计数器+1,直接进入;以后当线程退出同步代码块时,计数器减1,直到0释放锁

    public class classA{

    public synchronized void doSomething(){

    xxx

    }

     

    }

    public class classB extends classA{

    public synchronized void doSomething(){

    xxx

    super.doSomething();

    }

     

    }

    这段代码如果没有可重入的概念,就会引发死锁。

    原因是当调用super.dosomething()方法时,发现锁已经被占用,从而线程永远被停顿下去,等待一个永远也获取不到的锁。重入锁避免了死锁的发生。

  • 相关阅读:
    java基础英语---第二天
    树莓派的版本
    Linux系统下安装.deb文件
    在Raspberry上安装ROS
    树莓派文件权限的转换
    树莓派中Linux的相关命令
    raspberry连接ssh和vnc
    链表的建立及释放
    一些小细节问题
    关于构建二维动态内存(堆)及释放
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9517449.html
Copyright © 2011-2022 走看看