- 博客(6)
- 收藏
- 关注
原创 RabbitMQ
AMQP, 即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年, AMQP 规范发布。类比HTTP。
2023-07-31 18:04:33
61
1
原创 什么是反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。**序列化:**将 Java 对象转换成字节流的过程。**反序列化:**将字节流转换成 Java 对象的过程。
2023-07-31 17:55:43
53
1
原创 MYSQL
redo log就被引入来解决这个问题(宕机导致BP中的数据没有刷新磁盘,造成数据丢失),当数据被修改时,除了修改BP中的数据,还会在redo log中记录这次操作,当事务提交时,会调用fsync接口对 redo log进行刷盘,如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复,redo log采用的是WAL(Write-ahead logging,预写式日志), 所有修改先写入日志,在更新到BP,保证了数据不会因为MySQL宕机而丢失,从而满足了持久性的要求。
2023-07-28 10:33:08
117
1
原创 CAS原理
这些原子类封装了对多个变量的原子操作,可以保证多个变量之间的原子性,从而避免了使用锁机制时的竞争和上下文切换的开销。如果内存位置的值已经被其他线程修改过了,CAS 操作就会失败,返回当前的内存位置的值。例如,一个线程先将内存位置的值从 A 修改为 B,然后又将其从 B 修改为 A,此时另一个线程也修改了内存位置的值从 A 修改为 C,然后又将其从 C 修改为 A。CAS 操作的实现原理是在读取内存位置的值和预期原值后,比较它们的一致性,如果一致就将内存位置的值修改为新值,否则就返回当前内存位置的值。
2023-05-28 19:43:30
125
原创 Synchronize和ReentrantLock
释放锁:当一个线程调用 ReentrantLock 的 unlock() 方法来释放锁时,ReentrantLock 首先会将 state 的值减 1,如果 state 的值为 0,则表示该线程已经释放了锁,并将锁的占用者设置为 null;当一个线程释放锁时,ReentrantLock 会从等待队列中选择一个线程来唤醒,并尝试将锁的占用者设置为该线程。当一个线程进入 Synchronized 代码块时,会检查该对象头中的锁状态,如果锁未被占用,则将锁状态设置为占用,并将当前线程设置为持有锁的线程;
2023-05-28 19:16:08
146
1
原创 多线程练习
假设有100张火车票,现在有100个人要同时购买这100张火车票,每个人只能购买一张火车票。使用多线程编写程序模拟这个过程,要求输出每个人所购买的火车票的编号和剩余的火车票的数量。
2023-05-28 16:50:40
59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人