摘要: 阻塞队列介绍 1,ArrayBlockingQueue:数组实现的有界阻塞队列, 此队列按照先进先出(FIFO)的原则 对元素进行排序。 2,Li​nkedBlockingQueue:链表实现的有界阻塞队列, 此队列的默认和最大长度为 Integer.MAX_VALUE。此队列按照先进先出的原则对元 阅读全文
posted @ 2020-05-06 16:48 gnice512 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 1,使用及场景 CHM是J.U.C提供的一个线程安全且高效的HashMap,api基本和Hashmap类似,主要有get,put等方法。 2,源码分析 2.1 JDK1.7和1.8的变化​ JDK1.7,简单来说chm是一个segment数组,它通过集成ReentrantLock进行加锁,通过每次锁 阅读全文
posted @ 2020-05-06 15:25 gnice512 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 用一个小故事来梳理数字签名:1,鲍勃有两把钥匙,一把公钥一把私钥。2,鲍勃把公钥送给他的朋友,帕蒂,道格和苏珊每人一把。3,苏珊想给鲍勃写一份保密的信,用鲍勃的公钥加密之后就可以达到保密的效果。4,鲍勃收到之后,用鲍勃的私钥解密之后就可以看到信的内容,只要鲍勃的私钥不泄露,这封信就是绝对安全的。5,鲍勃想写回信给苏珊,采用数字签名,先用Hash函数生成信件内容的摘要(MD5或者SHA算法)。6,鲍... 阅读全文
posted @ 2020-05-01 14:24 gnice512 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 1,加密方法可以分为两大类。一类是单钥加密(private key cryptography),还有一类叫做双钥加密(public key cryptography)。前者的加密和解密过程都用同一套密码,后者的加密和解密过程用的是两套密码。2,在单钥加密的情况下,密钥只有一把,所以密钥的保存变得很重要。一旦密钥泄漏,密码也就被破解。3,在双钥加密的情况下,密钥有两把,一把是公开的公钥,还... 阅读全文
posted @ 2020-05-01 13:17 gnice512 阅读(147) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch 应用:适用于执行某个任务之前必须等到它的前置任务都执行完才可以开始。例如并发测试100个线程同时执行,网站各个模块多线程同时加载数据,当全部加载完成再返回给前端。 分析:内部使用的是共享锁机制 ​ new CountDownLatch(1) 首先初始化一个数字为1的计数 阅读全文
posted @ 2020-04-26 15:51 gnice512 阅读(161) 评论(0) 推荐(0) 编辑
摘要: Condition是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件,只有满足条件时,线程才会被唤醒。 结论: ​ 阻塞 :await()方法中,在线程释放锁资源之后,如果节点不在 AQS 等待队列,则阻塞当前线程,如果在AQS等待队列,则自旋等待尝试获取锁。 ​ 释放 :signal() 阅读全文
posted @ 2020-04-25 17:33 gnice512 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 本文转载自:https://blog.csdn.net/u013332124/article/details/84647915 文章目录 Thread.sleep() 方法 Object.wait() 方法 LockSupport.park() 方法 实现原理 和wait的不同 对中断的处理 总结 阅读全文
posted @ 2020-04-24 11:04 gnice512 阅读(576) 评论(0) 推荐(1) 编辑
摘要: JUC:Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。 lock ​ 定义了释放锁和获得锁的抽象方法,在JDK1.5出现,可以解决synchronized在某些场景下的短板,Loc 阅读全文
posted @ 2020-04-23 15:43 gnice512 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 初识Volatile 上面的代码,如果stop变量没有被volatile修饰的话,线程是不会被终止的,只有加上volatile,线程才会退出。 分析: 多线程环境下,读线程不能及时的获取到其他线程写入的最新的值,这就是所谓的可见性问题。 硬件层面分析可见性问题 ​ 众所周知,CPU、内存和IO设备之 阅读全文
posted @ 2020-04-21 15:16 gnice512 阅读(547) 评论(1) 推荐(0) 编辑
摘要: Synchronized 1 加锁方式 修饰实例方法 锁的是当前实例 修饰静态方法 锁的是当前类 例如Demo.class 修饰代码块 看具体锁对象分析 2 锁的存储 以32位虚拟机为例 为什么任何对象都可以实现锁? 每个Object在jvm都有一个native的C++对象进行对应,线程在获取锁的时 阅读全文
posted @ 2020-04-17 18:21 gnice512 阅读(470) 评论(0) 推荐(0) 编辑