1、MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。 MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。 2、当前读 ...
「转载」数据库知识点整理
存储引擎 InnoDB InnoDB 是 MySQL 默认的事务型存储引擎,只要在需要它不支持的特性时,才考虑使用其他存储引擎。 InnoDB 采用 MVCC 来支持高并发,并且实现了四个标准隔离级别(未提交读、提交读、可重复读、可串行化)。其默认级别时可重复读(REPEATABLE READ),在可重复读级别下,通过 MVCC + Next-Key Locking 防止幻读。 ...
Maven 打包可执行 Jar 包
在 pom.xml 中添加如下内容 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execu...
Maven 打包源码
<build> <plugins> <plugin> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configur...
ThreadPoolExecutor 整体工作流程
开始 初始化 调用 execute 方法 判断线程数是否小于核心线程数,如果是跳转到则创建核心线程(进入创建线程部分),firstTask 为要执行的任务,如果失败则跳转到4 判断线程池是否是 RUNNING 状态,如果是则放入任务队列如果成功则跳转到5 否则跳转到8 重新校验线程池是否是 RUNNING 状态,如果不是则跳转到6 否则 7 是否可以从队列中移除任...
ThreadPoolExecutor 源码阅读笔记一(JDK 1.8)
线程是个很好的工具,我们知道可以通过 new Thread().start() 的方式去开启一个线程,但是如果纯粹的使用这种方式去创建线程,每来一个任务,创建一个线程,这种方式是存在缺陷的,尤其是在无限制的创建大量线程的时候: 线程生命周期的开销非常高。线程的创建和销毁不是没有代价的。根据平台的不同,实际的开销开销也有所不同,因为线程的创建过程都会需要时间,延迟请求的处理,并且需要 ...
线程安全
概述 《Java Concurrency In Practice》的作者 Brian Geotz 对”线程安全“有一个比较恰当的定义:”当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。“ Java 语言中的线程安全 我们这里讨论的线程安...
Java 和线程
概述 并发不一定要依赖多线程(如 PHP 中很常见的多进程并发),但是在 Java 里面谈论并发,大多数都与线程脱不开关系。讲到 Java 线程,就从 Java 线程在虚拟机中的实现开始讲起。 线程的实现 线程时比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件 I/O 等),又可以独立调度(线程时 CPU 调度...
Java 内存模型
概述 衡量一个服务性能高低好坏,每秒事务处理数(Transactions Per Seconds,TPS)是最重要的指标之一,它代表着一秒内服务端平均能响应的请求总数,而 TPS 值与程序的并发能力又有非常密切的关系。对于计算量相同的任务,程序线程并发协调的越有条不紊,效率自然就会越高;反之,线程之间频繁阻塞甚至死锁,将会大大降低程序的并发能力。 Java 语言和虚拟机提供了许多工具,把...
虚拟机字节码执行引擎2之方法调用
概述 方法调用不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用那一个方法),暂时还不涉及方法内部的具体运行过程。 解析 所有方法调用中的目标方法在 Class 文件里面都有一个常量池中的符号引用,在类加载解析阶段,会将其中一部分符号引用转化为直接引用,这种解析能成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本是运行期不可变的。...