YC

【并发编程】 --- Reentrantlock源码解析2:公平锁加锁过程超详细解析

谁说胖子不能爱 提交于 2020-04-14 13:22:40
【推荐阅读】微服务还能火多久?>>> 文章目录 1 前情回顾 --- 同步方法交替执行时Reentrantlock公平锁的逻辑 2 线程t1抢到锁并且没释放的情况 2.1 线程t2、t3、t4......入队 --- addWaiter(Node.EXCLUSIVE), arg)方法 2.2 线程 t2、t3、t4...入队后 ---》自旋 + park 2.2.1 前置知识 --- Node数据结构介绍 2.2.2 线程 t2、t3、t4...入队后 ---》自旋 + park的具体流程 3 Reentrantlock公平锁加锁过程总结 源码地址: https://github.com/nieandsun/concurrent-study.git 1 前情回顾 — 同步方法交替执行时Reentrantlock公平锁的逻辑 前面一篇文章《 【并发编程】 — Reentrantlock源码解析1:同步方法交替执行的处理逻辑 》讲过无论是synchronized还是Lock锁, 让某块代码变为同步的本质 就是: 当一个线程执行该方法后,其他线程无法进入该方法,对应于Reentrantlock来说就是让其他线程的lock()方法无法正常返回。 那篇文章里讲过在方法交替执行时,Reentrantlock公平锁的主要逻辑如下,这里就不再过多叙述。 2 线程t1抢到锁并且没释放的情况 2.1

最新IDEA永久激活

拥有回忆 提交于 2020-04-10 08:25:17
此教程已支持最新2019.2版本 本教程适用Windows、Mac、Ubuntu等所有平台。 激活前准备工作 配置文件修改已经不在bin目录下直接修改,而是通过Idea修改 如果输入code一直弹出来,请去hosts里移除jetbrains相关的项目 1.下载新版破解补丁 点击链接 https://pan.baidu.com/s/112tS3XjAENIHaJ-aSCe0dA 或阅读原文下载补丁文件 jetbrains-agent.jar 并将它放置到 Idea安装目录的\bin目录下(位置可随意,放这里是怕误操作删除了破解文件)。 2.进入项目界面 如果你之前已经使用有效期激活过可跳过此步骤,如果你是刚下载的Idea,则需要点击激活窗口的“Evaluate for free”免费试用,然后再创建一个空项目,这样就可以进入到Idea的工作页面 3.修改配置文件 进入到项目界面后,点击Idea最上面的菜单栏中的 “Help” -> “Edit Custom VM Options …”,如果提示是否要创建文件,请点”Yes”。 在打开的vmoptions编辑窗口末行添加: -javaagent:你idea的安装目录\jetbrains-agent.jar 请仔细检查补丁路径是否正确,如果错误则会出现Idea打不开的情况,这时候可以删除用户配置目录下的Idea文件夹: windwos:C

最新IDEA永久激活

淺唱寂寞╮ 提交于 2020-04-08 18:39:50
此教程已支持最新2019.2版本 本教程适用Windows、Mac、Ubuntu等所有平台。 激活前准备工作 配置文件修改已经不在bin目录下直接修改,而是通过Idea修改 如果输入code一直弹出来,请去hosts里移除jetbrains相关的项目 1.下载新版破解补丁 点击链接 https://pan.baidu.com/s/112tS3XjAENIHaJ-aSCe0dA 或阅读原文下载补丁文件 jetbrains-agent.jar 并将它放置到 Idea安装目录的\bin目录下(位置可随意,放这里是怕误操作删除了破解文件)。 2.进入项目界面 如果你之前已经使用有效期激活过可跳过此步骤,如果你是刚下载的Idea,则需要点击激活窗口的“Evaluate for free”免费试用,然后再创建一个空项目,这样就可以进入到Idea的工作页面 3.修改配置文件 进入到项目界面后,点击Idea最上面的菜单栏中的 “Help” -> “Edit Custom VM Options …”,如果提示是否要创建文件,请点”Yes”。 在打开的vmoptions编辑窗口末行添加: -javaagent:你idea的安装目录\jetbrains-agent.jar 请仔细检查补丁路径是否正确,如果错误则会出现Idea打不开的情况,这时候可以删除用户配置目录下的Idea文件夹: windwos:C

ssh免密码登录配置

烈酒焚心 提交于 2019-12-24 14:40:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 生成秘钥对 [root@localhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:D0kugFN+1mryj+fpOrQ5vzZSsLr/jKnTmm26fJvqb7g root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | . | | + . | | o o o o | | . +.+ . | | . +oS | | +o..o | | =.+ . | | .+o@B+. | | .E/@&Xo |

算法之递归案例

蓝咒 提交于 2019-12-20 09:57:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 目录介绍 01.什么是递归 02.递归三个条件 03.斐波那契数列 04.找指定目录下所有文件 05.求1+2+…+N和 06.求100的阶乘 07.有序数组合并 08.求一个数乘方 09.背包问题 10.选择一支队伍 11.汉诺塔问题 12.二分法查找 13.警惕重复计算 14.开源项目推荐 01.什么是递归 递归:在一个方法内部对自身进行调用。利用递归可以用简单的程序来解决一些复杂的问题。比如:裴波那契数列的计算、汉诺塔、快排等问题。 递归结构包括两个部分: 1、定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。 2、递归体。解答:什么时候需要调用自身方法。 02.递归三个条件 递归需要满足的三个条件。刚刚这个例子是非常典型的递归,那究竟什么样的问题可以用递归来解决呢?我总结了三个条件,只要同时满足以下三个条件,就可以用递归来解决。 1.一个问题的解可以分解为几个子问题的解 何为子问题?子问题就是数据规模更小的问题。比如,前面讲的电影院的例子,你要知道,“自己在哪一排”的问题,可以分解为“前一排的人在哪一排”这样一个子问题。 2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 比如电影院那个例子,你求解“自己在哪一排”的思路,和前面一排人求解

YC StartupSchool 2018 & 2019 笔记

心不动则不痛 提交于 2019-12-05 15:23:20
欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 目录 SUS 2018 Sam Altman - 如何成功创业 Carolynn Levy、Jon Levy 和 Jason Kwon - 初创企业法律机制 与 Paul Graham 的对话 - 由 Geoff Ralston 主持 Michael Seibel - 构建产品 David Rusenko - 如何找到适合产品市场的产品 Suhail Doshi - 如何测量产品 Gustaf Alstromer - 如何获得用户和发展 Garry Tan - 初https://github.com/apachecn/stanfo创企业设计第 2 部分 Kat Manalac 和 Craig Cannon - 用于增长的公关+内容 Tyler Bosmeny - 如何销售 Ammon Bartram 和 Harj Taggar - 组建工程团队 Dalton Caldwell - 如何在 Y Combinator 上申请和成功 Patrick Collison - 运营你的创业公司 Geoff Ralston - 筹款基础 Kirsty Nathoo - 了解保险箱和定价股票轮 Aaron Harris -

Hash和HashCode深入理解

走远了吗. 提交于 2019-12-01 01:00:31
目录介绍 1.Hash的作用介绍 1.1 Hash的定义 1.2 Hash函数特性 1.3 Hash的使用场景 2.如何判断两个对象相等 2.1 判断两个字符串 2.2 判断两个int数值 2.3 其他基本类型 3.HashCode深入分析 3.0 HashCode是什么 3.1 为什么要重写HashCode 3.2 HashCode源代码分析 3.3 HashCode带来的疑问 3.4 HashCode的作用 3.5 HashMap中的HashCode 3.6 可直接用hashcode判断两个对象是否相等 4.Hash表是什么 4.1 Hash表定义 4.2 Hash表简单介绍 5.Hash中的算法应用 5.1 基础算法 5.2 经典算法[摘自网络] 5.3 Hash碰撞[摘自网络] 6.Hash在Java中的应用场景 6.1 equals与hashCode有两个注意点 6.2 以HashSet为例说明hashCode()的作用 6.3 以HashMap为例说明Hash的作用 6.4 7.版本更新情况 8.其他介绍 1.Hash的作用介绍 1.1 Hash的定义 散列(哈希)函数 把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值,是一种压缩映射。 或者说一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 1.2

Synchronize和ReentrantLock区别

ぃ、小莉子 提交于 2019-11-30 17:47:52
目录介绍 1.Synchronize和ReentrantLock区别 1.1 相似点 1.2 区别 1.3 什么是线程安全问题?如何理解 1.4 线程安全需要保证几个基本特性 2.Synchronize在编译时如何实现锁机制 3.ReentrantLock使用方法 4.ReentrantLock锁机制测试案例分析 4.1 代码案例分析 4.2 什么时候选择用ReentrantLock 4.3 公平锁和非公平锁有何区别 5.问答测试题 5.1 ReentrantLock和synchronized使用分析 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计47篇[近20万字],转载请注明出处,谢谢! 链接地址: https://github.com/yangchong211/YCBlogs 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变! 关于锁机制文章 01.Synchronize深入解析 Synchronize深入解析,sychonized method 和

int和Integer深入分析

让人想犯罪 __ 提交于 2019-11-29 19:41:44
目录介绍 1.关于int和Integer的问题区别分析 2.Integer的值缓存的原理 2.1 Java 5 中引入缓存特性 2.2 Integer类中的IntegerCache类 2.3 其他整型类型的缓存机制 3.理解自动装箱和拆箱 3.1 什么是装箱?什么是拆箱? 3.2 装箱和拆箱是如何实现的 3.3 装箱和拆箱在编程实际中注意点 4.原始类型线程安全问题 4.1 那些类型是线程安全的 4.2 如何验证int类型是否线程安全 4.3 AtomicInteger线程安全版 5.Java 原始数据类型和引用类型局限性 5.1 原始数据类型和 Java 泛型并不能配合使用 5.2 无法高效地表达数据,也不便于表达复杂的数据结构 6.关于其他知识延伸 6.1 对象的内存结构 6.2 对象头的结构 6.3 如何计算或者获取某个Java对象的大小 7.关于其他内容介绍 7.1 关于博客汇总链接 7.2 关于我的博客 1.关于int和Integer的问题区别分析 1.1 编译阶段、运行时,自动装箱 / 自动拆箱是发生在什么阶段? 1.2使用静态工厂方法 valueOf 会使用到缓存机制,那么自动装箱的时候,缓存机制起作用吗? 1.3为什么我们需要原始数据类型,Java 的对象似乎也很高效,应用中具体会产生哪些差异? 1.4 阅读过 Integer 源码吗?分析下类或某些方法的设计要点?

Sp效率分析和理解

China☆狼群 提交于 2019-11-29 00:25:55
目录介绍 01.Sp简单介绍 1.1 Sp作用分析 1.2 案例分析思考 02.Sp初始化操作 2.1 如何获取sp 2.2 SharedPreferencesImpl构造 03.edit方法源码 04.put和get方法源码 4.1 put方法源码 4.2 get方法源码 05.commit和apply 5.1 commit源码 5.2 apply源码 06.总结分析 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢! 链接地址: https://github.com/yangchong211/YCBlogs 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变! 01.Sp简单介绍说明 1.1 Sp作用分析 sp作用说明 SharedPreferences是Android中比较常用的存储方法,它可以用来存储一些比较小的键值对集合,并最终会在手机的/data/data/package_name/shared_prefs/目录下生成一个 xml