JAVA锁之可重入锁和递归锁及示例代码
概念:可重入锁
指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块
示例代码:
package com.debuggg.test1.main4;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** 作者 ZYL* 功能描述 : 可重入锁* 可重入锁:* 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码* 在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁** 也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块** case 1 : synchronized就是一个典型的可重入锁* t1 invoke sendSMS() t1线程在外层方法获取锁的时候* t2 #######invoke sendEmail() t1在进入内层方法会自动获取锁*** case 2 : ReentrantLock也是一个典型的可重入锁* 日期 2020-04-08 10:33* 参数 null* 返回值*/
public class ReentrantLockDemo {public static void main(String[] args) {Phone phone = new Phone();new Thread(() -> {phone.sendSMS();},"t1").start();new Thread(() -> {phone.sendSMS();},"t2").start();try{Thread.sleep(1000);}catch(Exception e){e.printStackTrace();}System.out.println();System.out.println();System.out.println();System.out.println();new Thread(phone,"t3").start();new Thread(phone,"t4").start();}}class Phone implements Runnable {public synchronized void sendSMS(){System.out.println(Thread.currentThread().getName() + "\tinvoke sendSMS()");sendEmail();}public synchronized void sendEmail(){System.out.println(Thread.currentThread().getName() + "\tinvoke sendEmail()");}Lock lock = new ReentrantLock();@Overridepublic void run() {get();}public void get(){lock.lock();try{System.out.println(Thread.currentThread().getName() + "\t invoke get()");set();}finally{lock.unlock();}}public void set(){lock.lock();try{System.out.println(Thread.currentThread().getName() + "\t invoke set()");}finally{lock.unlock();}}
}
JAVA锁之可重入锁和递归锁及示例代码相关推荐
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...
http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...
- java condition_(原创)Java的ReentrantLock(可重入锁)下的Condition
先来看一下这个Condition的使用场景,在LinkedBlockingQueue(链表的阻塞队列)类中包含如下的定义,通过使用lock.newCondition()方法,可以获得一个Conditi ...
- Java锁之可重入锁和递归锁
Java锁之可重入锁和递归锁 目录 Java锁之可重入锁和递归锁基本概念 Java锁之可重入锁和递归锁代码验证 小结 理论,代码,小结,学习三板斧. 1. Java锁之可重入锁和递归锁基本概念 可重入 ...
- Java多线程系列——深入重入锁ReentrantLock
简述 ReentrantLock 是一个可重入的互斥(/独占)锁,又称为"独占锁". ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSychr ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...
- java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)
1.公平锁.非公平锁 2.可重入锁(递归锁) 3.自旋锁 AtomicReference atomicReference = new AtomicReference();//原子引用线程 下面代码5秒 ...
- java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...
一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...
- java 可重入锁 clh_Java可重入锁原理
一. 概述 本文首先介绍Lock接口.ReentrantLock的类层次结构以及锁功能模板类AbstractQueuedSynchronizer的简单原理,然后通过分析ReentrantLock的lo ...
- Java 中可重入锁、不可重入锁的测试
可重入锁 指在同一个线程在外层方法获取锁的时候,进入内层方法会自动获取锁. 为了避免死锁的发生,JDK 中基本都是可重入锁. 下面我们来测试一下 synchronized 和 java.util.c ...
最新文章
- JQuery对XML文件的操作
- 函数参数和函数返回值
- 第三次学JAVA再学不好就吃翔(part105)--流的标准处理异常
- 基于 websocket 实现的 im 实时通讯案例
- nodejs学习笔记-用http模块开启服务器端口
- 京条计划,今日头条不仅是京东的又一流量入口
- MySQL数据库操作(3)表结构操作
- EasyUI:datagrid分页显示+嵌入select下拉选项框
- 【整理操作】MQTT简单使用学习
- jsp引进的js 显示404_【梅园大讲堂微课堂】Get超级大招!上海人才引进云申报权威解读来了...
- Dynamica AX2012 Tmp Table or Form 获取数据
- php第三方分享插件下载地址,PhpWind安装分享插件
- 2.4 数值分析: Doolittle直接三角分解法
- sipp工具的使用--简单的呼叫测试
- 散列表(线性探测法二次探测法)
- Android音视频开发学习
- 【计算机网络】(5)ping的过程分析+icmp协议
- 一个10年IT技术人的历程-Java架构师的演变
- 自动驾驶地图数据传输协议ADASISv3介绍
- 【LaTex】基础语法框架快速入门教程——Tex live+TexStudio简要安装及使用教程
热门文章
- C++语言类的详解和示例
- 从零起步的数据中心规划和建设
- 阿里2000亿,腾讯5000亿,我们究竟需要多少数据中心?
- 一步步实现SDDC-双节点VSAN部署
- Git学习总结(25)——Git 常用的分支开发模式及规范总结
- SSM后台框架下配合实现小程序图片上传至阿里云OOS
- nginx匹配规则说明以及匹配的优先级
- 【289天】跃迁之路——程序员高效学习方法论探索系列(实验阶段47-2017.11.21)...
- NetBeans第一部分代码提交Apache
- Linux 学习记录 二 (文件的打包压缩).