随笔分类 -  Java

摘要:原文:How G1 Garbage Collector work in Java 作者:Perspective Mentor G1垃圾收集器采用了一个全新的垃圾收集方式,这让它在Java中的其它GC算法中鹤立鸡群。 介绍 G1(Garbage-First)是作为Parallel和CMS的替代者被引入 阅读全文
posted @ 2024-05-29 11:13 yudoge 阅读(94) 评论(0) 推荐(0) 编辑
摘要:CVTE的面试里第二个答的不好的地方就是ConcurrentHashMap。 构造方法 默认构造方法 // 创建一个新的,具有默认表达小16的空Map public ConcurrentHashMap() { } 在默认构造方法中,我们可以看到ConcurrentHashMap实际上什么也没做,根据 阅读全文
posted @ 2023-02-18 20:22 yudoge 阅读(54) 评论(0) 推荐(0) 编辑
摘要:从高层来看 AQS,即AbstractQueuedSynchronizer类,无论是听起来还是看起来,它都很令人畏惧,但抛离它的实现原理,站在AQS的用户——比如Mutex、CountDownLatch这些类——的视角来看,AQS是一个非常好的助手。 AQS是一个用于实现同步器工具的框架,信号量、M 阅读全文
posted @ 2023-01-31 11:17 yudoge 阅读(96) 评论(0) 推荐(0) 编辑
摘要:前言 最近在学Rust,今天突然想到一段Java代码 public class Main { public static void main(String []args) { int a = 16; new Thread(() -> { System.out.println(a); }).start 阅读全文
posted @ 2022-12-29 20:30 yudoge 阅读(202) 评论(1) 推荐(1) 编辑
摘要:主要概念和术语 Event(事件)是一个现实世界或业务中发生的事,也叫消息或记录,说白了就是你写入Kafka的消息。Event具有key、value和timestamp,这和其它的消息系统有点儿不一样。 Producer和Consumer不介绍了,官方文档有这么一句话:Producer从不需要等待C 阅读全文
posted @ 2022-10-21 11:07 yudoge 阅读(80) 评论(0) 推荐(0) 编辑
摘要:并发问题的根源 可见性:一个线程的操作结果是否对另一个线程可见 原子性:一个线程进行操作时是否会被其它线程干扰 可见性问题的来源 缓存:每一个线程会有自己的工作内存来缓存主存中的内容,线程通过这个缓存操作主存,所以可能存在刷新不及时的问题 指令重排:CPU会对编译后的字节码指令进行重排序后执行,原则 阅读全文
posted @ 2022-08-09 14:21 yudoge 阅读(53) 评论(0) 推荐(0) 编辑
摘要:从一个示例开始 下面是一个用于打印的接口,它会将message打印到控制台,但以什么格式打印是实现类规定的。 package top.yudoge.springserials.basic.spi; public interface Printer { void print(String messag 阅读全文
posted @ 2022-07-11 16:55 yudoge 阅读(82) 评论(0) 推荐(0) 编辑
摘要:原文:10 Minute Tutorial on Apache Shiro 介绍 欢迎来到Apache Shiro的十分钟教程! 通过这个快速且简单的教程,你将完全理解一个开发者应该如何在它们的项目中使用Shiro。你应该能在10分钟之内完成! 概览 什么是Apache Shiro Apache S 阅读全文
posted @ 2022-06-05 13:58 yudoge 阅读(241) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 本书的最后一章~~~,但基本上参考Java官方文档比这本书多... 内存模型? 现代CPU为了提升性能常常会做一些优化,比如CPU将本来有序的指令重排,以乱序的方式执行;比如CPU将内存中的信息缓存到每个核心独有的寄存器或高速缓存......Java编译器(以 阅读全文
posted @ 2022-04-22 10:22 yudoge 阅读(39) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 本篇中介绍了并发编程(除锁定之外)的另一种思路——CAS。 前置知识 本章大量使用了竞争锁获取和非竞争锁获取这两个名词,但是书中没有解释它们的意思,这两个概念是Java的synchronized关键字在不同情况下的两种表现。 非竞争锁获取:即只有一个线程会访问 阅读全文
posted @ 2022-04-21 13:29 yudoge 阅读(173) 评论(0) 推荐(0) 编辑
摘要:状态依赖性的管理 状态依赖性指某种操作必须依赖于指定的状态才可以执行。比如一个阻塞队列的take方法依赖于这个阻塞队列中有至少一个元素这个状态。 如果一个状态依赖性操作所依赖的状态不满足,通常有几种处理办法: 抛出异常 使用某种约定的错误返回值 阻塞,直到依赖的状态被满足 在并发程序设计中,第三种办 阅读全文
posted @ 2022-04-20 15:46 yudoge 阅读(82) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 对性能的思考 性能与可伸缩性 可伸缩性是衡量并发程序性能的一个指标,可伸缩性指的是:当增加计算资源时(CPU、内存、存储容量或I/O带宽)程序的吞吐量或处理能力也相应的增加。 另外的一些指标比如:服务时间、延迟时间、吞吐率、效率和容量等。 和单线程程序中所说的 阅读全文
posted @ 2022-04-17 11:02 yudoge 阅读(139) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 死锁 死锁是由于多个线程相互持有对方想要获得的锁而造成的。 锁顺序死锁 这是产生死锁的一种最简单的场景,想象简化版的哲学家进餐问题,桌上有一根筷子,有两个哲学家,它们一次只能拿起一根筷子(左边的或者右边的),这时两个哲学家都想拿到这双筷子,哲学家A先拿起了左边 阅读全文
posted @ 2022-04-15 13:10 yudoge 阅读(53) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 之前一直在用Executor框架,也使用过一些ThreadPoolExecutor,但是一直没有深入了解过,本章作者讲解了线程池的更多用法和注意事项,以便我们写出更加健壮的并发程序。 隐含耦合 Executor的目标是将任务的提交和执行解耦,任务的提交者无需知 阅读全文
posted @ 2022-04-13 12:49 yudoge 阅读(155) 评论(0) 推荐(0) 编辑
摘要:《Java并发编程实战》一书的笔记 这一章好难啃,感觉每一句话都是人话,但是我读不懂,读好几遍了。 任务取消 首先说明任务和线程的概念,一个任务代表一段要执行的代码,它要放到线程中去执行。 很多场景下我们都需要取消一个已经提交了的任务,比如我现在有一个数字生成的任务,它可以无限的生成下去,但我希望它 阅读全文
posted @ 2022-04-12 14:58 yudoge 阅读(415) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 直接构建线程的问题 无论在单处理器还是多处理器系统中,多线程都能够提高程序的整体性能,但是如果我们在程序中直接的构建线程,可能会出现一些问题: public class DirectRunInNewThreadServer { public void serv 阅读全文
posted @ 2022-04-07 14:02 yudoge 阅读(1351) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 吐槽一下,这本书的翻译真的是有点差...... 本章中作者讲解了Java中一些自带的并发构建模块以及如何通过委托这些模块来构建出安全的并发程序。 同步容器类 同步容器包括Vector、Hashtable和JDK1.2中出现的Collections.synchr 阅读全文
posted @ 2022-04-05 16:14 yudoge 阅读(57) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 在开发中一定需要组合多个组件,这一章讲述了如何将多个(线程安全或非线程安全的)组件组合起来,向外界提供一个线程安全的类,使得外界可以放心的去使用我们的类。此外,还介绍了一些编码时应保持的习惯——书写文档。 设计线程安全的类 如何将很多个组件安全的组合起来,向外 阅读全文
posted @ 2022-04-04 15:15 yudoge 阅读(207) 评论(0) 推荐(0) 编辑
摘要:本篇博文是Java并发编程实战的笔记。 并发编程面临两个大的问题,一个就是关于共享数据的读写访问该如何同步,还有一个就是如何安全的将一个对象共享出去(给多个线程使用)。 可见性 可见性是你在共享一个对象时要缜密考虑的问题,它是说一个线程对于一个对象状态的修改是否能够及时的被另一个线程察觉,如果不能就 阅读全文
posted @ 2022-04-03 15:33 yudoge 阅读(517) 评论(0) 推荐(0) 编辑
摘要:MessagePack编解码 这是一个二进制序列化框架,将用它来改造之前的TimeServer。 添加依赖 <dependency> <groupId>org.msgpack</groupId> <artifactId>msgpack-core</artifactId> <version>${msg 阅读全文
posted @ 2022-03-25 15:38 yudoge 阅读(182) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩