每日一学(1)

news2024/10/7 5:47:46

目录

1、ConCurrentHashMap为什么不允许key为null?       

2、ThreadLocal会出现内存泄露吗?

3、AQS理解

4、lock 和 synchronized的区别


1、ConCurrentHashMap为什么不允许key为null?       

       底层  putVal方法 中 如果key || value为空 抛出空指针异常

       其实是为了避免在多线程并发场景下的歧义问题

       在获取key 返回结果为null 无法判断是 put(k,v)的时候 value本身是null值,还是key本身不存在。还是key存在 value为空 。这种不确定性造成线程安全问题 而ConCurrentHashMap本身是线程安全的集合,固key不能为null

2、ThreadLocal会出现内存泄露吗?

        ThreadLocal是用来解决线程安全性的一个工具,让每个线程都开辟了一块内存空间,用来存储共享变量的一个副本,然后每个线程只需要去访问和操作自己的共享变量的副本,去避免多线程竞争同一个共享资源。

        每个线程都有一个成员变量, ThreadLocalMap,当线程访问ThreadLocalMap修饰的成员变量时候, 保存数据副本 key为 ThreadLocal, 是弱引用 value 保存的是共享数据的副本 每个线程都有一个副本, 不存在对于共享数据的并发操作 解决了线程安全问题。

        弱引用 : 成员变量ThreadLocal 允许在引用关系存在的情况下被GC回收 一旦回收 key 的引用就会变为null, 就会导致内存永远无法被访问,造成内存泄漏

        ThreadLocal设计是一定存在内存泄漏的 。

        为了避免问题 在进行数据读写的时候 ThreadLocal默认会做一些清理动作,找到并清理entry里面的key为null的数据

        具体方法:

        1、每次用完ThreadLocal后,主动调用 remove() 方法移除数据 (最好方法)

        2、 ThreadLocal声明为全局变量,使得无法被GC回收(如果后续线程不再访问这个key,也会造成内存泄漏)

        最终回答:

        不恰当的使用threadlocal会造成内存泄漏,主要原因threadlocalmap里面的key是一个弱引用,弱引用特性是 不管是否存在直接引用的关系,当threalocal 没有其他的强引用关系的时候,对象就会被GC回收掉,从而导致key可能变为null,造成内存无法被访问

 

3、AQS理解

        AQS是多线程同步器,提供了两种锁的机制

        3.1、排它锁

        存在多个线程去竞争同一共享资源的时候,同一时刻只允许一个线程去访问这样一个共享资源,也就是多个线程中只能有一个线程去获得一个锁资源,

        比如 lock中的 ReentrantLock 重入锁,就是用到了AQS 中排它锁的功能

        3.2、共享锁

        也称为读锁,同一时刻允许多个线程同时获得锁的资源

         3.3、 AQS 作为互斥锁 需要解决三个核心问题
                3.3.1、互斥变量的设计如何保证多线程同时更新互斥变量的时候线程的安全性

         采用int 类型的互斥变量 state,用来记录锁竞争的状态 (0--没有 >=1 有线程持有。 线程获取锁资源 先会判断 state 是否为0 如果是 更新状态为1 表示占有到锁。 如果多个线程同时做一个操作,导致线程安全性问题,AQS 采用CAS机制保证state 互斥变量更新的一个原子性

                3.3.2、未竞争到锁资源的线程等待 以及竟遭到锁的资源释放锁之后的唤醒

        未获取到的线程 通过unsafe类中的park方法,去进行阻塞,把阻塞的线程按照先进先出的原则去加入到一个双向链表的一个结构中。当获取到锁资源的线程释放锁之后,会从双向链表的头部去唤醒下一个等待的线程,再去竞争锁

                3.3.3、锁竞争的公平性和非公共性

           公平锁先会判断双向链表是否有阻塞的线程,如果有就会排队等候

           非公平锁,不管是否有等待的线程,都会直接尝试更改state 去竞争锁

4、lock 和 synchronized的区别
  特性:

          synchronized:

          是java中的同步关键字。 两种方法控制锁定力度:1、把synchronized关键字修饰在方           法层面。2 、修饰在代码块上。  通过synchronized加锁对象的生命周期来控制锁定作用范           围。比如:锁对象是静态对象          或者是类对象,锁就属于全局锁。锁对象是普通实例对             象,锁定范围取决于实例生命周期。

          Lock

          是J.U.C包提供的接口,实现类: ReentrantLock重入锁的实现。  Lock中锁的力度是             通过 unlock() 方法和 lock() 方法来决定的,锁定作用域取决于Lock实例的生命周期

相同点: 

         功能:都是java中用来解决线程安全的问题一个工具       

不同点:

        1、Locksynchronized 灵活性更高

        Lock可以自主决定什么时候加锁,什么时候释放锁,只需要调用lock /unlock方法。Lock还提供了非阻塞的竞争锁方法,trylock方法, 通过返回true /false 来告诉当前线程是否已经存在有其他线程正在使用锁

        synchronized 是关键字。无法实现非阻塞竞争锁的方法, synchronized 锁的释放被动的,只有当synchronized 同步代码快 执行结束以后或者代码出现异常 ,才会被释放。

        2、Lock 提供了公平锁、非公平锁机制。 synchronized 只提供了非公平锁的实现

        3、性能差别

        synchronized 引入偏向锁、轻量级锁、重量级锁、以及锁升级的机制去实现锁的优化

        Lock 用到了自旋锁的方法实现性能优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1864495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具: 面板显示:工具包含一个面板,用于展示软件的不同版本信息。版本信息:面板上显示主版本号、当前版本号和子版本号。版本控制功能…

Socket——向FTP服务器发送消息并获得响应

1、简介 Socket(套接字)是网络编程中用于描述IP地址和端口的一个抽象概念,通过它可以实现不同主机间的通信。套接字可以分为几种不同的类型,每种类型对应不同的协议和传输模式。 1.1、基本概念 IP地址:用于标识网络…

智能语音抽油烟机:置入WTK6900L离线语音识别芯片 掌控厨房新风尚

一、抽油烟机语音识别芯片开发背景 在繁忙的现代生活中,人们对于家居生活的便捷性和舒适性要求越来越高。传统的抽油烟机操作方式往往需要用户手动调节风速、开关等功能,不仅操作繁琐,而且在烹饪过程中容易分散注意力,增加安全隐…

梅雨季要祛湿,更要养阳气!用好这2招,补足阳气,祛湿排寒,助你体质越来越好~

梅雨季祛湿正当时,但是很多人疑惑不断祛湿,可为什么湿气一直源源不断呢?除了不良生活方式没有改变外,很多人祛湿只是解决“标”的问题,没有解决“本”的问题。 中医有一句话叫“无阳难以化湿”! 我们可以简…

前端 CSS 经典:模拟 material 文本框

效果 思路 定义三个元素&#xff0c;文本框&#xff0c;下划线&#xff0c;占位文字。input 聚焦时通过 ~ 选中兄弟元素&#xff0c;利用 required 属性 css 中的 valid 验证&#xff0c;判断 input 中是否有输入。写入过渡效果。 实现代码 <!DOCTYPE html> <htm…

基于 JuiceFS 构建高校 AI 存储方案:高并发、系统稳定、运维简单

中山大学的 iSEE 实验室&#xff08;Intelligence Science and System) Lab&#xff09;在进行深度学习任务时&#xff0c;需要处理大量小文件读取。在高并发读写场景下&#xff0c;原先使用的 NFS 性能较低&#xff0c;常在高峰期导致数据节点卡死。此外&#xff0c;NFS 系统的…

203.回溯算法:N皇后(力扣)

class Solution { public:vector<vector<string>> result; // 用于存储所有合法的 N 皇后放置方案// 判断当前位置 (row, col) 是否可以放置皇后bool isValid(int row, int col, vector<string>& chess, int n) {// 检查当前列是否有皇后for (int i 0;…

锐起RDV5高性能云桌面

锐起是上海锐起信息技术有限公司旗下品牌。该公司创立于 2001 年&#xff0c;是桌面虚拟化产品和解决方案提供商&#xff0c;专注于桌面管理系统和私有云存储系统的系列软件产品研发&#xff0c;致力于简化 IT 管理、增强系统安全&#xff0c;提供简单、易用、稳定、安全的产品…

视觉与运动控制6

基于驱动器的控制功能 驱动器的系统性能和运算能力有限需要单独的运动控制器。 V/F恒压频比控制 开环控制方法&#xff0c;应用最广泛、最简单&#xff0c;只需要电机数据即可。适用于控制精度和动态响应要求不高的应用。控制原理&#xff1a;保持点击内磁通量恒定&#xff…

Android10 Settings系列(六)Settings中toolbar 的基本流程,和Activity如何关联,这可能是比较详细的分析

一、前言 写在前面:一个快捷栏,音量浮窗快捷进入设置界面,点击左上角返回键拉起设置首页问题引发的思考和解决方法 事情的起因是测试报了一个问题。在Android9的一个设备在点击音量键时,在弹出的弹框中,点击设置图标快速进入音量设置中,点击左上角返回按钮是,退出当前界…

【深度学习】基于因果表示学习的CITRIS模型原理和实验

1.引言 1.1.本文的主要内容 理解动态系统中的潜在因果因素&#xff0c;对于智能代理在复杂环境中进行有效推理至关重要。本文将深入介绍CITRIS&#xff0c;这是一种基于变分自编码器&#xff08;VAE&#xff09;的框架&#xff0c;它能够从时间序列图像中提取并学习因果表示&…

WebSocket 连接失败的原因及解决方法

WebSocket 目前已经成为了一项极为重要的技术&#xff0c;其允许客户端和服务器之间进行实时、全双工的通信。然而&#xff0c;在实际项目中&#xff0c;开发者时常会遇到 WebSocket 连接失败的情况。这不仅影响了用户体验&#xff0c;还可能导致不可预见的系统错误或数据丢失。…

PMP®项目管理国际认证——管理者的必备证书

北京青蓝智慧科技从2010年起专注于PMP认证的考前培训。 凭借十余年的研究与多位行业专家的合作探讨&#xff0c;我们推出了高效的“PMP通关四步法”。 这一方法经过多年实践检验&#xff0c;显著提升了考生的通过率&#xff0c;为众多学员带来了实质的学习成果。 第一阶段&am…

超低排放标准

据朗观视觉小编了解发现&#xff0c;超低排放标准作为衡量一个行业或企业环保水平的重要指标&#xff0c;越来越受到社会各界的关注。本文将深入探讨超低排放标准的内涵、实施意义以及未来展望。 一、超低排放标准的定义 超低排放标准&#xff0c;是指在特定工业生产过程中&am…

Mac 微信能上网但浏览器打不开网页

文章目录 推荐 DNSMac 设置 DNS 推荐 DNS 名称首选 DNS备用 DNSGoogle8.8.8.88.8.4.4114 DNS114.114.114.114114.114.115.115阿里223.5.5.5百度180.76.76.76腾讯119.29.29.29电信101.226.4.6联通123.125.81.6移动101.226.4.6铁通101.226.4.68福建电信218.85.152.99218.85.157.…

【STM32】USART串口通讯

1.USART简介 STM32芯片具有多个USART外设用于串口通讯&#xff0c;它是 Universal Synchronous Asynchronous Receiver and Transmitter的缩写&#xff0c; 即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于USART&#xff0c; 它还有具有UART外设(Univers…

C#1.0-11.0所有历史版本主要特性总结

文章目录 前言名词解释主要版本一览表各版本主要特性一句话总结 C# 1.0 (Visual Studio 2002, .Net Framework 1.0)C# 2.0 (Visual Studio 2005, .Net Framework 2.0)C# 3.0 (Visual Studio 2008, .Net Framework 3.0)C# 4.0 (Visual Studio 2010, .Net Framework 4)C# 5.0 (V…

抖音集团基于 Apache Doris 的实时数据仓库实践

作者&#xff1a;字节跳动数据平台 在直播、电商等业务场景中存在着大量实时数据&#xff0c;这些数据对业务发展至关重要。而在处理实时数据时&#xff0c;我们也遇到了诸多挑战&#xff0c;比如实时数据开发门槛高、运维成本高以及资源浪费等。 此外&#xff0c;实时数据处…

掌握Scrum:敏捷开发中的短期迭代与定期会议

目录 前言1. Scrum概述1.1 什么是Scrum1.2 Scrum的三大支柱 2. 短期迭代&#xff08;Sprint&#xff09;2.1 Sprint规划2.1.1 确定Sprint目标2.1.2 创建Sprint待办列表 2.2 Sprint执行2.2.1 每日站会 2.3 Sprint回顾2.3.1 Sprint评审2.3.2 Sprint回顾 3. 定期会议3.1 产品待办列…

LINUX操作系统:Mx Linux,用虚拟机VMware Workstation安装体验

需求说明&#xff1a; 操作系统目前流行有Windows、Linux、Unix等&#xff0c;中国人应该要知道国有操作系统&#xff0c;也要支持国产操作系统&#xff0c;为了更好支持国产操作系统&#xff0c;我们也要知己知彼&#xff0c;那么今天就来体验一把操作系统Mx_Linux_23.2的安装…