JAVA系列课程
Hollis,阿里巴巴技术专家《Java工程师成神之路》系列文章作者,热衷于分享计算机编程相关技术,博文全网阅读量上千万。
2024年10月15日
分布式事务是指在分布式系统中,由多个独立的服务或数据库参与的事务,确保这些分布式节点上的操作能够一致完成或回滚,从而保证数据的一致性。
一、两阶段提交(2PC)
将事务分为准备阶段和提交阶段。各节点在准备阶段确认操作无误后再提交,在遇到错误时会回滚。在2PC中,有两个核心角色,协调者、参与者。
优点:能保证各参与节点数据的一致性,适用于对数据一致性要求高的场景。
缺点:性能开销大(锁定资源时间较长)、可能会出现“协调者单点故障”问题,导致系统阻塞。
准备阶段:
(1)协调者向所有参与者发送commit请求,询问是否可以提交事务,并等待答复。
(2)各参与者开始准备执行事务,将uodo...
2024年10月12日
一、什么是CAP定理
CAP定理指出,在分布式系统中,无法同时满足一致性、可用性和分区容错性这三个特性。通常需要在一致性和可用性之间进行取舍,因为分区容错性对于分布式系统而言几乎是必不可少的。
CAP定理:C(数据一致性)、A(可用性)、P(分区容错性)
(1)C全称Consistency(一致性)...
2024年10月11日
一、基于Zookeeper实现分布式锁
通过ZooKeeper的节点创建与删除来实现分布式锁,使用临时节点(防止死锁)和顺序节点(可以利用锁释放的事件监听机制,来实现阻塞监听式的分布式锁)来管理锁的获取与释放。
也可通过使用ZooKeeper的一个客户端Curator,Curator提供的InterProcessMutex是分布式锁的实现,acquire方法用于获取锁,release方法用于释放锁。
实现原理:Zookeeper是一个分布式协调服务,分布式协调主要是来解决分布式系统中多个应用之间的数据一致性,Zookeeper内部的数据存储方式类似于文件目录形式的存储结构。在Zookeeper中的指定路径下创建临时节点,然后客户端根据当前路径下的节点状态来判断是否加锁成功。
获取锁:
创建一个临时序列节点,代表当前请求的锁。
获取当前根节点下的所有子节点并进行排序。
检查当前节点是否是最小的节点,如果是,则获取锁成功。
如果不是,则设置一个观察者,等待前一个节点的删除。
释放锁:...
2024年10月9日
一、什么是异常处理
异常处理是程序设计中用于捕获和处理运行时错误的机制。异常分为两大类,一个是Checked异常,一个是Runtime异常。
异常分类结构:
Throwable类主要方法:
getMessage()...
2024年10月7日
一、什么是线程
线程是并发编程的基本单位,它是程序执行的最小单位,Java程序默认单线程,所有程序都在主线程中运行。一个进程通常包含多个线程,这些线程共享进程的资源。线程间可以通过共享内存进行通信,这使得线程的创建和上下文切换比进程更为轻量和高效。
进程有独立的内存空间和资源,每个进程是相互隔离的。Java应用程序运行在JVM(Java虚拟机)上,JVM本身就是一个进程。
二、如何创建线程
(1)继承Thread类
通过继承Thread类并重写run方法来创建线程。每个Thread对象代表一个线程。
class...