随笔分类 - 学习笔记
摘要:jar -uvf0 xxx.jar ./BOOT-INF/lib/yyy.jar 更新或新增 xxx.jar 包里的 yyy.jar 文件。 jar -uvf0 xxx.jar com/xxx/yyy/zzz.class 更新或新增 xxx.jar 包里的 zzz.class 文件。 参数可选项:
阅读全文
摘要:CopyOnWriteArrayList 的使用 优点: CopyOnWriteArrayList 是读写安全的 ArrayList,读操作不加锁,写操作加锁。 写操作时,会复制一份当前数组,然后去添加或移除元素,不会阻塞读操作,故适合读多写少的场景。 缺点: CopyOnWriteArrayLis
阅读全文
摘要:LinkedHashMap 的原理与使用 LinkedHashMap 是对 HashMap 的封装和拓展,在保留了 HashMap 原有功能的基础上,加了一些链表相关的属性,用来记录 HashMap 元素的先后顺序,这样如果要根据(节点插入或访问)顺序访问节点时,只要去遍历链表即可。 默认元素插入顺
阅读全文
摘要:HashMap 结构 HashMap的组成部分:数组 + 链表 + 红黑树。HashMap的主干是一个Node数组。Node是HashMap的基本组成单元,每一个Node包含一个key-value键值对。HashMap的时间复杂读几乎可以接近O(1)(如果出现了 哈希冲突可能会波动下),并且Hash
阅读全文
摘要:使用 信号量(Semaphore)允许多个线程同时访问临界区资源,而 ReentrantLock 这类锁同时只允许一个线程访问临界区资源。 Semaphore 就是共享锁,它的构造方法可以传一个许可数 permits,表示临界区资源数量,多少个资源同时也最多只能由多少个线程来访问。当 permits
阅读全文
摘要:使用 CyclicBarrier 类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。 CyclicBarrier 也可以实现类似 CountDownLatch 的功能,而且比 CountDownLatch 更强大,因为 CyclicBarrier 可以重复被使用。 代码示例:
阅读全文
摘要:使用 CountDownLatch 类似于 Thread 的 join 方法,使用时,先构造 CountDownLatch 对象,构造函数传线程数据数 n,表示等待这 n 个线程都完成后再执行主线程代码。 主线程使用 await 方法阻塞等待 n 个线程执行完成;n 个线程执行完成后调用 count
阅读全文
摘要:线程池创建与使用 线程池的创建 Executors 框架提供了各种类型的线程池,主要有以下工厂方法∶ public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newCac
阅读全文
摘要:Future 使用 Future 的使用: 使用线程池创建 Future 对象 ExecutorService executorService = Executors.newSingleThreadExecutor(); Future future = executorService.submit(
阅读全文
摘要:ReentrantLock 简介 ReentrantLock也是一个可重入的互斥锁,跟 synchronized 提供一样的线程同步功能,但是比 synchronized 更加灵活,优化了 synchronized 的不足。 ReentrantLock 基于 AQS 实现,它使用一个内部类来实现 A
阅读全文
摘要:具体安装参考:hotswap-agent-intellij-plugin。 以管理员权限安装 DCEVM 并且配置好之后,选择去 idea 中下载 HotSwapAgent 插件方式安装,而不必使用下载 hotswap-agent.jar 安装的方式。 安装好 HotSwapAgent 插件之后,按
阅读全文
摘要:redis cli h localhost p 6379 [ a 密码] : 连接 Redis 服务器。 keys :查询所有缓存键。 keys pattern : 根据 pattern 筛选出所有符合的缓存键。 flushall : 清空所有缓存。 删除指定 key 的缓存 <! break 删除
阅读全文

浙公网安备 33010602011771号