自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 并发编程笔记:synchronized关键字浅析

一、synchronized关键字1.1、锁的状态(1)无锁:在没有开启偏向锁或者偏向锁延迟未到或者批量撤销后,对象创建完成后,没有任何线程使用该对象来加锁,此时该对象的状态是无锁。对应的JAVA对象头lock=01,biased_lock=0。(biased_lock=0的含义表示不可偏向)(2)偏向锁:对象创建完成后处于可偏向状态,某一个线程使用该对象来加锁,那么这个对象就偏向这个线程。对应的JAVA对象头lock=01,biased_lock=1。(3)轻量级锁:当有多个线程交替使用某

2020-06-07 18:21:04 308 1

原创 spring源码笔记五:bean工厂后置处理器

五、bean工厂后置处理器5.1、源码解析refresh()方法比较重要的代码是上篇文章标注的第5条和第11条代码,本次先解析第5行的代码invokeBeanFactoryPostProcessors,执行bean工厂后置处理器。点进invokeBeanFactoryPostProcessors,再点进PostProcessorRegistrationDelegate.invo...

2020-03-22 13:15:08 671

原创 spring源码笔记四:容器刷新

四、容器刷新再次回到我们的AnnotationConfigApplicationContext构造方法。第三步,就是刷新我们的容器,也就是通过上一步注册的配置类来完成整个容器的构建,此方法是spring容器初始化的核心。点进refresh方法。代码解析:这个方法的代码是spring的核心代码,我们稍后一一讲解。...

2020-03-22 13:15:01 229

原创 spring源码笔记三:注册配置类

三、注册配置类回到AnnotationConfigApplication的构造方法,在方法的第二行便是注册我们传入的AppConfig.class配置类的Class对象。(这里只是注册beanDefinition,并不会创建对应的对象,创建对象在后面)3.1、注册配置类点进register方法:这里我们可以看到,spring使用之前在无参构造中创建的AnnotatedBea...

2020-03-22 13:14:54 374

原创 spring源码笔记二:AnnotationConfigApplicationContext的无参构造方法

二、AnnotationConfigApplicationContext的无参构造方法源码分析从main方法的第一行看起。AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);我们新建了一个AnnotationConfigApplication对...

2020-03-22 13:14:48 433

原创 spring源码笔记一:项目环境搭建

一、spring项目环境搭建1.1、项目创建1.1.1、在eclipse中新建一个maven project1.1.2、在pom.xml中加入启动spring环境的最基本的依赖本次源码解析以5.0.7.RELEASE代码为准,不保证其他版本spring代码与之一致。 <dependency> <groupId>org.springfra...

2020-03-22 13:14:40 283

原创 并发编程笔记十一:线程池

十一、线程池11.1、Executor框架11.2、Executor接口Executor接口代表了一个执行器,他可以按照不同的策略去执行提交过来的任务。public interface Executor { void execute(Runnable command);}通过execute(Runnable command)方法,我们可以将需要执行的...

2020-03-22 13:14:32 120

原创 并发编程笔记十:基于AQS的同步工具

十、基于AQS的同步工具10.1、CountDownLatch倒数器10.1.1、使用场景当我们使用多线程处理一个大任务时,我们要把大任务转换为若干个小任务去执行。当这些小任务都执行完成时,我们需要汇总这些小任务的执行结果。所以汇总线程需要等到所有小任务都执行完成之后才能继续执行,这时候我们就可以使用CountDownLatch工具了。10.1.2、源码分析CountDownL...

2020-03-22 13:14:23 155

原创 并发编程笔记九:AQS

九、锁的底层AQS9.1、AQS的简介AQS的全称是AbstractQueuedSynchronizer抽象队列同步器。它是一个抽象类,继承它可以自定义各种同步工具。ReentrantLock的底层使用的就是AQS。9.2、独占模式和共享模式在某些场景下,我们需要在一个线程执行一段代码时,其他线程就不可以进入这段代码执行,就是说在一个时间点只能有一个线程执行这段代码块,这种同步模式...

2020-03-21 18:31:26 158

原创 并发编程笔记八:CAS

八、非阻塞操作CAS8.1、锁的劣势不管是内置锁synchronized还是显示锁Lock,在一个线程获取到锁之后,另一个线程再去尝试获取锁的时候,都会因为无法获取到锁而进入阻塞状态。当获取锁的线程释放锁之后,其余在阻塞状态下的线程才能获取到锁。8.2、CompareAndSwapjava中的锁是悲观的技术,在操作之前总是认为会有其他线程会干预自己的操作,所有对需要操作的资源进行加...

2020-03-21 18:31:18 78

原创 并发编程笔记七:显示锁

七、显示锁7.1、内置锁synchronized的缺陷 内置锁使用的格式 synchronized(锁对象){ // 获取锁,获取不到会一直阻塞 同步代码块 } // 释放锁缺陷:获取锁的线程在无法获取锁的时候,会一直阻塞在获取锁的位置,无法中止,会无限的等待下去。无法对获取不到锁做相关的逻...

2020-03-21 18:31:11 79

原创 并发编程笔记六:性能问题

六、性能问题6.1、性能在一定的配置下,如果一个程序的运行时间越短,吞吐量越大,我们就说这个程序的性能越好。现代计算机的cpu核数越来越多,cpu执行速度越来越快,多线程的程序可以充分利用多核cpu的性能,提高cpu处理器的利用率。所以,大部分情况下多线程能提高程序的性能。但是如果引入线程的开销和同步代码块对性能的影响大于处理器的利用率,程序的性能是降低的。6.2、多线程的开销和同...

2020-03-21 18:31:02 117

原创 并发编程笔记五:活跃性问题

五、活跃性问题活跃性问题包括死锁、活锁、饥饿,最著名的就是死锁问题了。5.1、死锁5.1.1、什么是死锁系统中的每一个线程都持有着其他线程需要的资源,同时又想获取其他线程已经拥有的资源,并且每个线程在获取全部想要的资源之前不会释放已经拥有的资源,那么这种情况就称为死锁。例如:当线程一持有A锁,想要获取B锁的同时,线程二持有者B锁,并且想要获取A锁。那么线程一和线程二就产生了死锁...

2020-03-21 18:30:55 157

原创 并发编程笔记四:安全性问题

四、安全性问题 安全性问题主要有原子性操作、内存可见性、指令重排序三大问题4.1、原子性操作4.1.1、问题描述原子性操作是指一个或一组操作在一个线程执行完成后,另一个线程才能进行该操纵,这些操作是不可切割的,线程不能在这些操作上交替执行。由于有些计算需要依赖之前读取到的结果,当执行该计算时,需要依赖的值在内存中已经被其他线程修改了,所以他使用了一个错误的值进行计算...

2020-03-21 18:30:45 220

原创 并发编程笔记三:并发编程的问题

三、并发编程的问题3.1、共享和可变在并发编程中,如果一个变量可以被多个线程访问,那么这个变量是共享的;如果一个变量的值可以被访问他的线程修改,那么这个变量是可变的。对于共享可变变量就存在着线程问题。3.2、线程并发问题对于共享可变变量存在着三大问题:安全性问题、活跃性问题、性能问题...

2020-03-21 18:30:38 83

原创 并发编程笔记二:线程

二、线程现代操作系统中,线程是被操作系统调度和执行的单位。进程是拥有资源所有权的单位。Java中的线程Thread是对操作系统的线程的一种抽象,他与操作系统的线程有些不一样。2.1、线程的特点1)一个进程中包含一个或多个进程;2)同一个进程中的线程可以共享进程中的资源,包括内存资源、IO资源等等;3)线程创建、切换、销毁成本比进程小;4)线程间通信方便、效率高,因为可以共享...

2020-03-21 18:30:30 338

原创 并发编程笔记一:进程

一、进程:1.1、进程的概念一个执行的程序叫做一个进程1.2、进程的特点1)资源所有权: 进程中所拥有的资源是不能和其他进程共享的2)调度/执行 操作系统会为进程分配时间片1.3、进程的状态在操作系统级别上,进程分为5种状态。1)新建 进程刚创建的时候;2)就绪 进程处于就绪队列中的状态,只有在就绪...

2020-03-21 18:30:12 131

原创 记一次tomcat源码启动控制台中文乱码问题调试过程

今天准备学习下tomcat源码,于是从官网下载了tomcat的源码,导入到IDEA中,使用maven工具build完项目之后,启动项目,控制台打印了tomcat日志,但是中文都是乱码。一开始我怀疑是IDEA的问题,于是在网上找了各种解决办法尝试。大致有这几种:1、修改run/debug configurations,添加VM options参数:-Dfile.encoding=utf-8;...

2020-03-09 14:25:03 7088 26

原创 mysql笔记十三:redo日志

关键字:redo日志、mtr、log buffer、redo日志文件、lsn、checkpoint13.1、什么是redo日志(1)什么是redo日志当一个事务提交之后,为了满足持久性的要求,理论上应该将此事务修改的所有页从buffer pool中刷新到磁盘上,事务才算完成。以避免内存中的脏页还没刷新到磁盘上,数据库宕机而导致事务失败。但是刷脏页的操作是费时且效率低下的,所以inn...

2019-09-25 21:19:20 626

原创 mysql笔记十二:事务简介

关键字:事务特性、ACID、事务状态、事务语法、隐式提交12.1、事务的特性数据库数据的状态对应了现实世界的状态,现实世界的每一次操作对应了数据库的操作。每一次操作就是一次状态的转换,数据库状态转换要符合现实世界的转换,这些转换规则就是事务的特性。数据库事务的特性:ACID(1)原子性:Atomicity 事务中的一组操作不可分割,要么全部成功,要么全部失败。...

2019-09-23 21:48:09 119

原创 mysql笔记十一:Buffer pool缓冲池

关键字: buffer pool、控制信息、free链表、flush链表、LRU链表、LRU分段、脏页、chunkmysql从磁盘上加载数据页到内存中后,会在内存中做一个缓存,下次再需要加载数据页时,先去缓存中查找,如果能找到就直接使用,否则才去磁盘上加载数据页再放入缓存中。这个缓存就是buffer pool。11.1、系统参数设置(1)innodb_buffer_pool_size...

2019-09-21 22:41:18 325

原创 mysql笔记十:表空间结构

关键字: HSP_HDR、IBUF_BITMAP、INODE、XDES、数据字典对于InnoDB表空间来说,表空间是有多个区组成的。其中的每个区都由物理位置上连续的64个页组成,因为每个页的大小为16K,所以一个区的大小是1M。区太多了就难以管理了,所以每256个区组成一个组,按组管理。10.1、HSP_HDR类型页表空间的第一个组的第一个区的第1页是FILE_PAGE_T...

2019-09-19 20:46:27 581

原创 mysql笔记九:表空间相关概念

关键字: 区、段、Segment Header、链表基节点、碎片区、数据字典9.1、区(extent)表空间是由多个区组成的。其中的每个区都由物理位置上连续的64个页组成,因为每个页的大小为16K,所以一个区的大小是1M。InnoDB使用XDES Entry结构来描述一个区。一个区对应着一个XDES Entry结构,XDES Entry结构存在HSP_HDR类型页和XDES类型页中。...

2019-09-17 22:55:14 274

原创 mysql笔记八:mysql数据目录

关键字:数据目录、目录结构、其他文件8.1、数据目录Mysql的数据最终是要存储在硬盘上的,存储在硬盘上的位置叫做数据目录。通过下面命令可以查看数据目录:show variables like ‘datadir’;mysql> show variables like 'datadir' ;+----------------------+------------------...

2019-09-15 19:40:42 181

原创 mysql笔记七:索引的作用

关键字:查询、排序、分组、缺点7.1、用于查询 where聚簇索引是Mysql自动建立在主键上的索引,我们想要对某些列建立自己的索引,就需要建二级索引,一般会对多个列建立联合索引,对于二级联合索引在查询的时候,在以下情况下可以使用上索引:例如我们对某个表的A、B、C列建立了联合索引,idx_A_B_C,我们称A为索引左边的列。查询能用上索引的情况是:在每一个查询条件检索后,查询出来...

2019-09-13 23:39:52 98

原创 mysql笔记六:B+树索引

关键字:聚簇索引、辅助索引、联合索引、回表操作、覆盖索引6.1、聚簇索引在表创建的时候,InnoDB就会为我们自动创建一个聚簇索引,InnoDB所有的用户数据都存在这个聚簇索引构成的B+树的叶子节点上,所以对于聚簇索引来说,索引就是数据,数据就是索引。数据和索引存在一起。存放用户数据的数据页在聚簇索引形成的B+树的叶子节点上,索引目录存放在B+树的非叶子节点(也叫内节点)上。对于聚...

2019-09-11 21:31:48 112

原创 mysql笔记五:innodb数据页结构

关键字:页类型、数据页、Infimum、supremum Records、page deirectory5.1、InnoDB页类型InnoDB中页按照功能不同,分为许多种类型,存储我们用户数据的页称为File_Page_Index(数据页或索引页)。InnoDB中所有页类型如下表: InnoDB页类型 名称 十六进制 ...

2019-09-09 20:09:50 322

原创 mysql笔记四:innodb行格式

关键字:行格式、记录头、行溢出4.1、InnoDB的页简单介绍数据是存储在硬盘上的,而数据处理是在内存中的。所以mysql处理数据时,需要将硬盘中的数据加载到内存中来,当有数据新增修改或删除时,需要将内存中的新的数据刷新到硬盘中去。mysql中数据在硬盘和内存之间交互时,并不是一条一条的数据交互,而是以页(Page)作为最小的基本单位,InnoDB中页的大小一般为16K。4.2、Inn...

2019-09-07 22:45:06 169

原创 mysql笔记三:字符集和比较规则

关键字:字符集、比较规则、字符集转换3.1、字符集3.1.1、字符集概念字符集就是在一定范围内,字符和计算机中二进制数据(0101)的对应关系。字符转二进制数据为编码,二进制数据转字符为解码。3.1.2、常用字符集 常用字符集 字符集 范围 1个字符占用字节数 说明 ...

2019-09-05 20:17:55 177

原创 mysql笔记二:mysql设置

关键字:启动选项、系统变量、状态变量2.1、启动选项2.1.1、定义在mysql程序启动时指定的设置项2.1.2、设置方式(1)在命令行上使用 a)短形式和长形式 短形式格式:-option1value1,例如:-h127.0.0.1 长形式格式:--option1[=value1] –option2[=value2],例如:--...

2019-09-03 20:45:06 124

原创 mysql笔记一:mysql简介

关键字:客户端、服务端、逻辑架构、存储引擎1.1、mysql介绍mysql是一个关系型数据库服务器。mysql分为服务端和客户端,每一个mysql服务端进程都是一个mysql实例。mysql服务端进程名称:mysqld;mysql客户端进程名称:mysql。1.2、启动mysql服务端在mysql安装目录的bin目录下,有多个可以启动mysqld的执行文件,分别是:...

2019-09-01 22:31:04 543

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除