- 博客(141)
- 收藏
- 关注
原创 @Builder注解导致mybatis类型匹配错误 Cannot determine value type from string
@Builder导致的mybatis实体类字段匹配错误 错配导致类型转换错误
2025-11-02 22:13:20
606
原创 HashMap的线程安全性 vs ConcurrentHashMap
ConcurrentHashMap扩容是逐个桶进行的,当某一个桶内的所有节点都完成扩容(创建新桶-迁移旧桶数据到新桶)后,旧桶会被置为ForwardingNode节点,该桶只有一个ForwardingNode节点数据,ForwardingNode节点不保存数据,只是一个占位标记,表明当前桶的数据已经被迁移到新表,nextTable指向新表,get方法在获取数据的过程中如果碰到ForwardingNode则会通过nextTable从新表获取数据。或者,是否会存在多个并发的写入线程?
2025-07-25 23:25:18
940
原创 JAVA线程安全性 voliate vs sychronized
首先,轻量级同步机制是和synchronized相比较而言的,由于synchronized的实现依赖于操作系统的线程管理机制,需要更多的系统资源调度才能实现,所以我们一般管他叫做重量级实现。相比而言,voliate是在JAVA世界的内部实现,是JAVA虚拟机内部自己就能解决的,所以我们管voliate叫轻量级同步机制。
2025-07-19 09:37:49
828
原创 JAVA线程安全性
摘要: 本文探讨了线程安全的概念及其产生原因。线程安全指在多线程环境下,类无需额外同步措施即可正确运行。通过一个账户计数器示例,展示了非线程安全导致的错误结果(如counter++操作)。线程安全问题主要由两个原因引起:1) 多线程争夺共享内存资源;2) 操作不具备原子性(如counter++包含读取、计算、写入三步,可能被中断)。分析表明,共享变量和非原子操作共同导致线程安全问题。理解这些机制有助于开发中规避线程安全隐患。
2025-07-06 14:54:49
761
原创 JAVA内存区域划分
根据《JAVA虚拟机规范》的规定,JAVA虚拟机在执行JAVA程序的过程中会把内存划分为不同的数据区域。不同类型的数据会存储在不同的区域,理解JAVA内存区域的工作细节对理解JAVA多线程、线程安全性有着重要意义。注意,JAVA内存区域的划分与我们常说的java内存模型JMM(Java Memery Model)是两个互不交叉的维度的概念,两者没有任何关系。JMM主要是将主内存和工作内存的关系、数据从主内存区读取的工作内存、以及从工作内存写回到主内存区、以及不同线程的工作内存间数据同步的问题。
2025-07-02 20:26:54
925
原创 ArrayList剖析
大家天天在用List,ArrayList一般来讲应该是程序员用的最多的集合类了。我们今天研究一下ArrayList。总体来讲,从底层数据结构或者源码的角度看,List比Map或者Set要简单。
2025-07-02 20:21:24
440
原创 HashMap和HashSet的区别
所以你说他们两个有什么区别?HashSet可以看成是封装之后的HashMap的一个代理。从底层数据结构的角度看,他们其实就是同一头驴子,在不同的场合给他一个不同的披挂,拉出来遛而已。只不过在某些场合他的某些功能被限制了不让用,而已。此外,省点力气:LinkedHashSet对应LinkedHashMap,TreeSet对应TreeMap。你如果就是想知道一下他们的区别,记得百度之后甄别一下对错,挑选出正确的记下就是了。以上1~5应该是对的,第6条不知道是怎么得出的,肯定不对。
2025-07-02 20:17:09
394
原创 浏览器播放监控画面
10年前没有找到很好的解决方案,可能是需求本身相对复杂一点,而且,当初也许没有现在这样相对成熟的解决方案,毕竟,经过这么多年的发展,摄像机厂商也不像当年那样各自为战,视频编码格式以及控制方式各种不统一,目前,据简单了解,通过ONVIF协议实现控制也相对比较简单,关键是,绝大部分的摄像机厂商都会遵守ONVIF协议。浏览器播放实时监控视频其实不外乎两个方案:一个还是以前的老方案,通过插件的方式直接播放RTSP,但是,插件几乎要被淘汰了,即使不淘汰,使用起来也非常不方便,所以,这个方案也基本不考虑。
2025-06-13 21:55:50
910
原创 HashMap vs LinkedHashMap
实际对大多数应用场景来说,我们只要记住第一个区别就可以了。如果某一场景要求按照存储时的顺序获取数据,那我们一定要记得不能用HashMap,必须用LinkedHashMap。本着二杆子程序员精神,我们假设你一定想知道所以然。所以我们还是从两者底层数据结构开始分析。
2025-06-13 21:20:49
984
原创 认识LinkedHashMap
LinkedHashMap是HashMap的子类,上一节初步分析过HashMap,这一节分析LinkedHashMap。
2025-06-13 21:18:59
763
原创 HashMap真面目
AbstractMap抽象类实现了Map接口,具体化了部分Map接口定义的方法。实现了一个叫SimpleEntry的Entry(就是Map接口中定义的内部接口),还有一个叫SimpleImmutableEntry的Entry。暂且不表,不影响主题:识别HashMap真面目。
2025-06-12 21:54:23
1229
原创 rsync实现远程同步
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。以上内容来自于百度百科,本文记录的是Linux之间的同步,Linux与Windows系统之间的同步稍后研究。
2025-05-19 14:52:25
525
原创 ScheduledThreadPoolExecutor抛出异常后不继续执行的问题
文章对周期性任务线程池从源码角度做了比较详细的分析,包括线程调度策略、任务队列、任务从队列按时出队、重新按照delay时间安排下次任务等,对大部分核心源码都做了分析。所以,以为对ScheduledThreadPoolExecutor了解差不多了,不太会碰到所谓的莫名其妙的问题了…但是,其实所有的莫名其妙的问题要么就是掌握的知识不够充分、详细,要么就是自以为是过头了…
2025-04-12 11:49:47
943
原创 BlockingQueue - 基于TransferQueue的SynchronousQueue
阻塞队列 BlockingQueue TransferQuene SynchronousQueue
2025-01-02 21:57:46
863
原创 BlockingQueue - 基于TransferStack的SynchronousQueue
多线程 阻塞队列 BlockingQueue TransferStack SynchronousQuene
2025-01-01 21:20:28
1032
原创 周期性任务线程池 - ScheduledThreadPoolExecutor & DelayedWorkQueue
线程池 周期性任务线程池 ThreadPoolExecutor DelayedWorkQueue
2024-12-12 17:16:46
1108
1
原创 JAVA定时任务 - JDK Timer
而Runable方式下就只是new了一个Runable对象,然后new了多个Thread、启动多个线程执行的时候是把这个唯一的Runable对象传递给了Thread的target,不同线程持有的是相同的Runable对象作为他们的target,同一个对象的成员变量当然是共享的。但是这个执行时间其实Timer是没有办法保证的,因为线程挂起之后再次被唤醒是依赖于CPU的调度的,CPU在10秒执行了一次任务之后,下次任务不一定能在20秒被唤醒,有可能是22秒或者23秒的时候才会被唤醒。
2024-12-10 20:57:11
839
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅