自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java并发编程之 AQS

队列同步器AbstractQueuedSynchronizer(AQS),是用来构建锁或者其他同步组件的基础框架(ReentrantLock、CountDownLatch、Semaphore…),它使用了一个int成员变量表示同步状态(private volatile int state;),通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。state用关键字volatile修饰,代表着该共享资源的状态一更改就能被所有线程可见,而A

2021-09-30 16:51:04 433

原创 Java并发编程之 atomic

当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作:public class Main { int i = 0; void inc() { this.i++; } public static void main(String[] args) throws In

2021-09-29 16:13:41 1043

原创 Java并发编程之 CAS

乐观锁乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。CAS是乐观锁。CASCAS即比较并交换(compare and swap)。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS 操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值(V)与预期原值(A)相匹配,那么处理器会自动将该位置值更新为新值(B)。

2021-09-24 10:03:27 478

原创 Java并发编程之 synchronized

Java中的每一个对象都可以作为锁。具体表现为以下3种形式:对于普通同步方法,锁是当前实例对象对于静态同步方法,锁是当前类的Class对象对于同步代码块,锁是synchonized括号里配置的对象都对于同步代码块而言,JVM是使用monitorenter和monitorexit实现的:monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处,JVM要保证每个monitorenter必须有对应的monitorexit与之配对。任何对象

2021-09-22 20:39:16 1004 1

原创 Java并发编程之 volatile

并发编程三大特性原子性、有序性、可见性volatile可以保证有序性和可见性,不能保证原子性happens-before原则在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。程序顺序规则:一个线程中,按照程序顺序,前面的操作 happens-before 于后续的任意操作监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁volati

2021-09-21 16:31:20 548

原创 Java并发编程之 JMM内存模型

硬件内存架构现代计算机的基本硬件架构如图所示:多CPU:一个现代计算机通常由两个或者多个CPU。其中一些CPU还有多核。从这一点可以看出,在一个有两个或者多个CPU的现代计算机上同时运行多个线程是可能的。每个CPU在某一时刻运行一个线程是没有问题的。这意味着,如果你的Java程序是多线程的,在你的Java程序中每个CPU上一个线程可能同时(并发)执行。CPU寄存器(CPU Registers):每个CPU都包含一系列的寄存器,它们是CPU内内存的基础。CPU在寄存器上执行操作的速度远大于在主存上执

2021-09-21 08:51:36 408

原创 Spring 声明式事务

项目结构:表结构:基于xml的声明式事务配置IAccountDao.java:package tx.dao;import java.math.BigDecimal;public interface IAccountDao { void add(String name, BigDecimal money); void sub(String name, BigDecimal money);}AccountDaoImpl.java:package tx.servi

2021-09-20 20:11:39 733

原创 JVM初探

一个Java文件的执行流程粗略地讲就是这样:1、javac编译器2、类装载子系统

2021-09-16 16:53:55 347

原创 JVM初探之 字节码执行引擎

字节码执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。在不同的虚拟机实现中,执行引擎在执行字节码的时候,通常会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,还可能会有同时包含几个

2021-09-16 11:52:27 551

原创 JVM初探之 堆和垃圾回收

对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java世界里“几乎”所有的对象实例都在这里分配内存(The heap is the runtime data area from which memory for all class instances and arrays is allocated)。Java堆既可以被实现成固定大小的,也可以是可扩展的,不过

2021-09-15 17:41:28 1047

原创 JVM初探之 方法区

方法区是一个规范,永久代、元空间是它的具体实现jdk1.8以前,方法区的实现叫永久代,是存储在堆上的。字符串常量池、静态变量、类型信息等是存储在永久代的jdk1.8及以后,方法区的实现叫元空间,是存储在本地内存上的。jdk1.7时,常量池、静态变量被移动到了堆内存,到了jdk1.8,永久代彻底不存在了,变成了元空间...

2021-09-14 17:58:23 383

原创 JVM初探之 Java虚拟机栈

Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果Java虚拟机栈容量可以动态扩展,当栈扩展时无法申请到足够的内存会抛出OutOfMemo

2021-09-14 10:43:23 351

原创 JVM初探之 类装载子系统(类加载器)与双亲委派机制

java的类加载步骤大概分为三步:1、加载加载阶段的主要任务是将.class文件中的类转化为java.lang.Class对象,具体步骤为:通过一个类的全限定类名获取其二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在堆中创建一个该类的java.lang.Class对象,作为方法区中这个类的各种数据的访问入口2、连接2.1、验证验证的主要目的是确保被加载的类的正确性。包括:文件格式的验证元数据的验证字节码的验证符号引用的验证验证阶段虽然重要,但是也可

2021-09-12 19:59:07 603

原创 JVM初探之 javac编译器

javac编译器的编译过程大概分为三步:1、解析与填充符号表1.1、词法分析1.2、语法分析1.3、填充符号表2、注解处理器3、语义分析与字节码生成3.1、标记检查3.2、数据及控制流分析3.3、解语法糖3.4、字节码生成1、解析与填充符号表1.1、词法分析将源代码的字符流转变为标记(Token)集合,单个字符是程序编写时的最小元素,而单个Token是程序编译时的最小元素。关键字、变量名、字面量、运算符都可以看作是Token。1.2、语法分析根据词法分析产生的Token生成一个抽象语法树(Abs.

2021-09-09 10:38:49 485

原创 TCP的三次握手与四次挥手

TCP协议头部的构成握手挥手过程主要与TCP协议头部的三个字段有关,分别是序号seq、确认号ack以及TCP标记序号:序号一共占用32个比特位,所以它可以表示的范围是0~232。因为TCP协议是面向字节流的,因此,每一个字节都有一个唯一的序号,这个序号就是用来标记传输的每一个字节的(一个字节一个序号)。这里的序号所代表的就是,这个TCP报文所传输的数据的第一个字节序号是什么确认号:确认号所表示的范围也是0~232,也是一个字节一个确认号。确认号表示的就是期待收到数据的首字节序号是什么TCP标记:

2021-09-08 17:51:16 620

原创 OSI七层模型与TCP/IP五层模型orTCP/IP四层模型

OSI七层模型:TCP/IP五层模型:就是将OSI七层模型最上面的三层(会话层、表示层、应用层)合并为应用层TCP/IP四层模型:就是将TCP/IP五层模型中最下面的两层(物理层、数据链路层合并为网络接口层)...

2021-09-08 11:22:50 611

Typora安装程序

Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术。支持十多种文本格式的导出.(HTML,PDF,Word文档⋯)。同时他还能将文本导出为图片。

2020-04-10

空空如也

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

TA关注的人

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