聊聊原子性和持久性
1. 概念 什么是原子性? 在同一项事务的处理过程中,事务保证了对多个数据源的修改,要么同时成功,要么同时撤销。 什么是持久性? 事务保证所有成功被提交的数据的修改都能正确的被持久化,不丢失数据。 数据只有写入磁盘、磁带等持久化存储器后才会拥有持久性,只存储在内存中的数据,一旦遇到应用程序突然崩溃,或者数据库、操作系统一侧崩溃,甚至是机器突然宕机等情况数据就会丢失。 但现实最大的困难是...
1. 概念 什么是原子性? 在同一项事务的处理过程中,事务保证了对多个数据源的修改,要么同时成功,要么同时撤销。 什么是持久性? 事务保证所有成功被提交的数据的修改都能正确的被持久化,不丢失数据。 数据只有写入磁盘、磁带等持久化存储器后才会拥有持久性,只存储在内存中的数据,一旦遇到应用程序突然崩溃,或者数据库、操作系统一侧崩溃,甚至是机器突然宕机等情况数据就会丢失。 但现实最大的困难是...
1. 概述 基于XA协议的2PC、3PC 基于业务层的TCC 应用消息队列+消息表 seata 2. 2PC基于 XA 协议实现的分布式事务,XA 协议中分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如 Oracle、MYSQL 这些数据库都实现了 XA 接口,而事务管理器则作为一个全局的调度者。 两阶段提交(2PC),对业务侵⼊很小,它最⼤的优势就是对使⽤...
1. 实现多线程1.1 创建多线程的方式1.1.1 实现Runnable接口12345678public class RunnableThread implements Runnable { @Override public void run() { System.out.println('用实现Runnable接口实现线程'...
0. 简介: ThreadLocal 并不解决线程间共享数据的问题 ThreadLocal 通过隐式的在不同线程内创建独立实例副本避免了实例线程安全的问题;每个线程持有一个 Map 并维护了 ThreadLocal 对象与具体实例的映射,该 Map 由于只被持有它的线程访问,故不存在线程安全以及锁的问题 ThreadLocalMap 的 Entry 对 ThreadLocal 的引用为弱引...
1. CountDownLatchlatch 的中文意思是门栓、栅栏,CountDownLatch 基于 AQS 的共享模式的使用 1.1 使用例子 假设我们有 N ( N > 0 ) 个任务,那么我们会用 N 来初始化一个 CountDownLatch,然后将这个 latch 的引用传递到各个线程中,在每个线程完成了任务后,调用 latch.countDown() 代表完成了一个任务...
1. BlockingQueue由来在生产者-消费者模式中,为了使生产者消费者解藕,需要一个存放元素的容器,使生产者可以只关心往队列里添加元素下,消费者只关系从队列中取出元素进程处理。 而且这个队列必须要满足两点: 线程安全 缓冲池空了,我们需要阻塞消费者,唤醒生产者;当缓冲池满了,我们需要阻塞生产者,唤醒消费者 JDK 为此设计了 阻塞队列(BlockingQueue),并提供了几个基...
1. AQS简介 抽象同步队列,实现同步器的基础组件,如常用的ReentrantLock、Semaphore、CountDownLatch等。 AQS定义了一套多线程访问共享资源的同步模板,解决了实现同步器时涉及的大量细节问题,能够极大地减少实现工作。 2. 结构继承关系AQS属性AQS重要方法Node属性ConditionObject属性ConditionObject重要方法123456...
1. 什么是线程池2. ThreadPoolExecutor源码2.1 继承关系 Executorexecute(Runnable): 用来执行传进去的任务ExecutorServicesubmit()、invokeAll()、invokeAny() 以及shutDown() 等AbstractExecutorService基本实现了ExecutorSe...
1. CopyOnWriteArrayList简介 在JDK1.5 之前,如果想要使用并发安全的 List 只能选择 Vector。而 Vector 是一种老旧的集合,已经被淘汰。Vector 对于增删改查等方法基本都加了 synchronized,这种方式虽然能够保证同步,但这相当于对整个 Vector 加上了一把大锁,使得每个方法执行的时候都要去获得锁,导致性能非常低下。 JDK1.5 ...
1. ConcurrentHashMap1.71. 存储结构 Segment 数组 + HashEntry 数组 + 链表 2. 初始化方法初始化逻辑无参构造有参构造 必要参数校验。 校验并发级别 concurrencyLevel 大小,如果大于最大值,重置为最大值。无参构造默认值是 16. 寻找并发级别 concurrencyLevel 之上最近的 2 的幂次方值,作为初始化容量大小,...