- 博客(135)
- 收藏
- 关注
原创 JAVA线程安全性
摘要: 本文探讨了线程安全的概念及其产生原因。线程安全指在多线程环境下,类无需额外同步措施即可正确运行。通过一个账户计数器示例,展示了非线程安全导致的错误结果(如counter++操作)。线程安全问题主要由两个原因引起:1) 多线程争夺共享内存资源;2) 操作不具备原子性(如counter++包含读取、计算、写入三步,可能被中断)。分析表明,共享变量和非原子操作共同导致线程安全问题。理解这些机制有助于开发中规避线程安全隐患。
2025-07-06 14:54:49
729
原创 JAVA内存区域划分
根据《JAVA虚拟机规范》的规定,JAVA虚拟机在执行JAVA程序的过程中会把内存划分为不同的数据区域。不同类型的数据会存储在不同的区域,理解JAVA内存区域的工作细节对理解JAVA多线程、线程安全性有着重要意义。注意,JAVA内存区域的划分与我们常说的java内存模型JMM(Java Memery Model)是两个互不交叉的维度的概念,两者没有任何关系。JMM主要是将主内存和工作内存的关系、数据从主内存区读取的工作内存、以及从工作内存写回到主内存区、以及不同线程的工作内存间数据同步的问题。
2025-07-02 20:26:54
885
原创 ArrayList剖析
大家天天在用List,ArrayList一般来讲应该是程序员用的最多的集合类了。我们今天研究一下ArrayList。总体来讲,从底层数据结构或者源码的角度看,List比Map或者Set要简单。
2025-07-02 20:21:24
407
原创 HashMap和HashSet的区别
所以你说他们两个有什么区别?HashSet可以看成是封装之后的HashMap的一个代理。从底层数据结构的角度看,他们其实就是同一头驴子,在不同的场合给他一个不同的披挂,拉出来遛而已。只不过在某些场合他的某些功能被限制了不让用,而已。此外,省点力气:LinkedHashSet对应LinkedHashMap,TreeSet对应TreeMap。你如果就是想知道一下他们的区别,记得百度之后甄别一下对错,挑选出正确的记下就是了。以上1~5应该是对的,第6条不知道是怎么得出的,肯定不对。
2025-07-02 20:17:09
359
原创 浏览器播放监控画面
10年前没有找到很好的解决方案,可能是需求本身相对复杂一点,而且,当初也许没有现在这样相对成熟的解决方案,毕竟,经过这么多年的发展,摄像机厂商也不像当年那样各自为战,视频编码格式以及控制方式各种不统一,目前,据简单了解,通过ONVIF协议实现控制也相对比较简单,关键是,绝大部分的摄像机厂商都会遵守ONVIF协议。浏览器播放实时监控视频其实不外乎两个方案:一个还是以前的老方案,通过插件的方式直接播放RTSP,但是,插件几乎要被淘汰了,即使不淘汰,使用起来也非常不方便,所以,这个方案也基本不考虑。
2025-06-13 21:55:50
683
原创 HashMap vs LinkedHashMap
实际对大多数应用场景来说,我们只要记住第一个区别就可以了。如果某一场景要求按照存储时的顺序获取数据,那我们一定要记得不能用HashMap,必须用LinkedHashMap。本着二杆子程序员精神,我们假设你一定想知道所以然。所以我们还是从两者底层数据结构开始分析。
2025-06-13 21:20:49
859
原创 认识LinkedHashMap
LinkedHashMap是HashMap的子类,上一节初步分析过HashMap,这一节分析LinkedHashMap。
2025-06-13 21:18:59
682
原创 HashMap真面目
AbstractMap抽象类实现了Map接口,具体化了部分Map接口定义的方法。实现了一个叫SimpleEntry的Entry(就是Map接口中定义的内部接口),还有一个叫SimpleImmutableEntry的Entry。暂且不表,不影响主题:识别HashMap真面目。
2025-06-12 21:54:23
1186
原创 rsync实现远程同步
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。以上内容来自于百度百科,本文记录的是Linux之间的同步,Linux与Windows系统之间的同步稍后研究。
2025-05-19 14:52:25
422
原创 ScheduledThreadPoolExecutor抛出异常后不继续执行的问题
文章对周期性任务线程池从源码角度做了比较详细的分析,包括线程调度策略、任务队列、任务从队列按时出队、重新按照delay时间安排下次任务等,对大部分核心源码都做了分析。所以,以为对ScheduledThreadPoolExecutor了解差不多了,不太会碰到所谓的莫名其妙的问题了…但是,其实所有的莫名其妙的问题要么就是掌握的知识不够充分、详细,要么就是自以为是过头了…
2025-04-12 11:49:47
860
原创 BlockingQueue - 基于TransferQueue的SynchronousQueue
阻塞队列 BlockingQueue TransferQuene SynchronousQueue
2025-01-02 21:57:46
827
原创 BlockingQueue - 基于TransferStack的SynchronousQueue
多线程 阻塞队列 BlockingQueue TransferStack SynchronousQuene
2025-01-01 21:20:28
997
原创 周期性任务线程池 - ScheduledThreadPoolExecutor & DelayedWorkQueue
线程池 周期性任务线程池 ThreadPoolExecutor DelayedWorkQueue
2024-12-12 17:16:46
1057
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
732
原创 Runable和Callable的区别?首先要搞清楚Thread以及FutureTask!
Runable和Callable的区别,FutureTask
2024-07-27 10:08:53
801
原创 清理mysql binglog文件
mysql随着使用时间的推移,binglog文件会越来越大,比如我们的oa系统,上线4年多了,最近总有磁盘空间满影响系统正常使用的情况出现。检查后发现binglog是罪归祸首。max_binlog_size = 1024M # 设置单个Binlog文件的最大大小。发现我的binglog文件非常多,检查了下发现每一个都是大家伙,有1个G。binglog文件最好不要采用应删除的方式清理,如下方式可安全清除。然后再查看磁盘空间占用情况,98%瞬间降到的48%。以上文件是按照时间先后顺序排列的。
2024-05-25 16:38:06
633
原创 docker入门级命令
docker的连个基本概念:镜像、容器。docker镜像可以理解为是存储docker安装包的地方,比如:mcr.microsoft.com/mssql/server:2017-latest是sqlserver的docker镜像。可以通过docker pull命令拉取远程镜像到本地。
2024-04-26 22:29:10
997
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人