- 博客(6)
- 收藏
- 关注
原创 学习笔记——手撕AQS
这版代码有两个问题,第一,当某一个线程持有锁后,flag变为true,其他想要获取锁的线程只能在lock()中不停的循环,很消耗CPU;第二,线程A获取锁后,线程B也能解锁,也就是无法保证锁的对称性,即加锁解锁是同一个线程。版本1 要实现lock()和unlock()两个方法,需求是线程调用lock()获取锁,未获取到锁就阻塞在lock()中,采用原子变量AtomicBoolean+CAS实现,unlock()同理。跟着视频学完了AQS相关内容,写点笔记记录一下,把输入的内容消化输出一下。
2025-04-20 23:33:56
197
原创 学习笔记——手撕定时任务
现在要设计一个定时任务,task表示要执行的任务,delay表示延时时间,默认为毫秒,最直观的想法是定义一个线程池来执行任务,假设定义一个固定大小线程池,线程数为10,使用Thread.sleep()表示任务延迟时间,加一个死循环来每次让任务在延迟相应的时间后不停地去执行。这种设计也能看到一个很明显的问题,即使list中先执行的任务要等待1s,后执行的任务只需等待0.5s,后执行的任务也要在1s后才能执行。所以改为PriorityBlockingQueue来实现,每次拉取到的任务一定是最优先执行的。
2025-04-09 21:41:32
200
原创 启动SpringBoot项目时,Lombok不生效
启动SpringBoot项目时,出现上述报错信息,依次确认已经正确安装lombok插件,引入了Lombok依赖,并按照提示开启了Enable annotation processing,但是仍然未解决问题。
2025-03-23 22:21:18
607
原创 面向对象设计
现在有一个停车场,停车场里面有两种车位:大车位和小车位。现在有两种车,一种大车,一种小车。大车只能停在大车位里面,小车两种车位都可以去停,一个车位只能停一辆车。在这个前提条件之下,如果一辆车到这个停车场门口,有能停的车位就让他进去,没有就让这个车走。设计一个停车场的管理系统。既然是面向对象,首先要搞清楚有几个对象,上述要求可以缩减为“车停在停车场的车位里”,那么可以抽象出三个对象:停车位、车、停车场。
2025-02-21 18:44:56
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅