锁java

news/2024/11/28 11:38:27/

在这里插入图片描述
synchronized 底层实现原理
线程在获取锁的时候,其指针指向的是一个monitor对象(由C++实现)的起始地址。每个对象实例都会有一个 monitor。其中monitor可以与对象一起创建、销毁;亦或者当线程试图获取对象锁时自动生成。而monitor是添加Synchronized关键字之后独有的。synchronized同步块使用了monitorenter和monitorexit指令实现同步,这两个指令,本质上都是对一个对象的监视器(monitor)进行获取,这个过程是排他的,也就是说同一时刻只能有一个线程获取到由synchronized所保护对象的监视器。 线程执行到monitorenter指令时,会尝试获取对象所对应的monitor所有权,也就是尝试获取对象的锁,而执行monitorexit,就是释放monitor的所有权。

在这里插入图片描述
Lock完全用Java写成,synchronized 是JVM实现的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一定要这么写,不然有问题

trylock:在这里插入图片描述

在这里插入图片描述

第二个线程如果超过5秒,就获取失败

在这里插入图片描述
如果第二个线程没有获取锁,unlock的时候,会报错,所以要加个if
如果第二个线程5秒内没有获取锁,中断
trylock与lock区别,trylock如果获取不到,就不获取了,lock则不是

sysnchroized与reentrantlock区别
syschronized jvm级别,重入
reentrantlock 手动,重入,lock指令, condition

与读写锁reentrantreadwritelock区别 细粒度问题

生产者消费者 在这里插入图片描述
condition:线程池队列用的就是condition

最底层的核心类

reentrantlock 锁的底层实现就是这个类abstractQueuedSynchronizer
在这里插入图片描述

在这里插入图片描述
队列+双向链表.

abstractQueuedSynchronizer 简称aqs同步器
非公平锁

在这里插入图片描述
在这里插入图片描述
countdownlatch
CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。
CountDownLatch 在 JDK 1.5 被引入。
存在于 java.util.concurrent 包下。
例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
场景,等远程接口执行完了,再执行我的业务,就是依赖调用

在这里插入图片描述
用来做限流,并发限流
分布式限流 redis+lua 在这里插入图片描述
第二章
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以做订单号生成
原子性的底层是cas
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
嗅探机制,可以理解为类似于监听器,
在这里插入图片描述
hashp map

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
链表大于8的时候,才会变红黑树
hashtable与currenthashmap
都是线程安全
但是,底层不一样,
hashtable put的时候是synchrnized 在这里插入图片描述
currenthashmap 1.7分段锁
linkarraylist 双向链表

在这里插入图片描述
在这里插入图片描述
add方法 带锁,线程安全
在这里插入图片描述get没有锁,get老值,所以不用,
在这里插入图片描述
线程池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

schedule方法 定时任务 5秒后执行

在这里插入图片描述
schedulatfixedrate 会一直执行run方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
submit底层也是调用execute方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
线程执行顺序用join

在这里插入图片描述
懒汉模式线程不安全,可以用volitiel修饰,就可以解决


http://www.ppmy.cn/news/360289.html

相关文章

java 锁

目录 一,对象头 1,Mark Word 2,指向类的指针 3,数组长度 二,实例数据 三,对齐填充字节 Java对象保存在内存中时,由以下三部分组成: 1,对象头 2,实例…

[Java]锁

锁 GO! 乐观锁悲观锁自旋锁原理自旋锁优缺点优点缺点自旋锁时间阈值(1.6 引入了适应性自旋锁)自旋锁的开启 Synchronized 同步锁Synchronized作用范围Synchronized核心组件Synchronized实现JDK1.6后的优化 ReentrantLockLock接口主要方法tryLock 和 lock 和 lockInt…

java锁

1.悲观锁 :锁住资源其他线程不能在访问 2.乐观锁: 不锁资源,默认其他进程不会修改资源 锁住同步资源失败 线程是否需要阻塞? 阻塞 不阻塞: 自旋锁 适应性自旋锁 减少了线程上下文的其二环 因为是不阻塞 而…

freeswitch如何判断挂机方

概述 freeswitch作为VOIP的软交换平台,需要对呼叫的信息做判断和归类。 常见的呼叫信息中,挂机方向的信息对于话单统计有很大的用处。 但是fs的原始话单和日志中并没有挂机方向的信息。 环境 centos:CentOS7 freeswitch:v1.…

挂机宝搭建教程

nokvm主控面板推荐操作系统版本 Centos7.6.1810 (纯净的操作系统,无其他软件环境) 主控面板硬件要求配置: - 最低要求 推荐配置 内存 2G 2G CPU - - 带宽 不低于2M 2M 磁盘 / 分区不少于100GB 100GB 主控面板安装&#xff1…

vc编写挂机锁

凡是去过网吧的朋友,对挂机锁一定不陌生,鼠标被限定,键盘关键按键被屏蔽。那么这是如何实现的呢,我们也来写一个吧。 // lockDlg.cpp : implementation file//#include "stdafx.h"#include "lock.h"#include…

关于电脑锁机

电脑锁机的种类 电脑锁机众所周知分为三种 1. 屏幕锁 2. 用户锁 3. 硬盘锁 首先屏幕锁 原理:软件打开后置于最上层并覆盖其他软件界面,通常是全屏,这种锁机比较有威慑性因为界面可以做的比较震撼人心,通常会把一些可以关闭窗口的东西给禁用…

分布式锁解决方案_Redis实现的分布式锁原理

获取锁 互斥:确保只有一个线程获得锁 添加锁 利用setnx的互斥性 启动Redis的我们进行测试看看怎么能某个数据来获得锁 setnx命令表示上锁只要是aa被创建出来我们不删除aa或者设定时间自动删除,那么这把锁就不能被释放开 释放锁 手动释放锁 如果我们…