- 博客(3)
- 收藏
- 关注
原创 Redis分布式锁和Zk分布式锁
基于Redis分布式锁思路大概是这样的:在redis中设置一个值表示加了锁,然后释放锁的时候就把这个key删除。具体代码如下: // 获取锁 // NX是指如果key不存在就成功,key存在返回false,PX可以指定过期时间 SET anyLock unique_value NX PX 30000 // 释放锁:通过执行一段lua脚本 // 释放锁涉及到两条指令,这两条指令不是原子性的 // 需要用到redis的lua脚本支持特性,redis执行lua脚本是原子性的 if redis.
2020-07-06 17:08:00 225
原创 线程池学习笔记
最大线程数只有在队列满了以后才开始工作。任务最大容量=最大数量+等待队列最大数量,超过则拒绝执行,会需要自己写拒绝策略,不然会抛出异常。如下图:如果将核心线程池数量设置成0,最大线程数量为int最大值,则适用场景为不可控的无法预估到底有多少任务同时提交,不过不建议设置成int最大值,会造成不稳定,设置成1000以下。如下图:定时任务的执行方式,线程数量的控制,如果任务大多数是同时被执行,那么需要更多的线程数,注意那个5,定时任务的本质是延时队列。线程池原理流程图如下:..
2020-07-06 15:38:05 392
原创 NIO学习笔记
1.NIO的三个核心组件,Buffer缓冲器,Channel通道,Selector选择器。Buffer缓冲器缓冲区本质上是一个可以写入数据的内存块(类似数组),然后可以再次读取。此内存块包含在NIO Buffer对象中,该对象提供了一组方法,可以更轻松地使用内存块。 相比较直接对数组的操作,BufferAPI更加容易操作和管理。 使用Buffer进行数据写入与读取,需要进行如下四个步骤:将数据写入缓冲区。调用buffer.flip(),转换为读取模式缓冲区读取数据调用buffer.clear(
2020-07-05 19:59:24 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人