本篇内容包括:悲观锁与乐观锁的概述、CAS(Compare And Swap)比较并交换的介绍、非阻塞算法与ABA问题,以及对 Java 中 CAS 的实现解读(AtomicInteger 对 CAS 的实现,Unsafe 类简介)。一、悲观锁与乐观锁锁的一种宏观分类方式是悲观锁和乐观锁。悲观锁与乐观锁并不是特指某个锁(Java 中没有哪个 Lock 实现类
......
322
0
0
2022-12-20
本篇内容包括:线程池概述、Java 线程池的几个重要参数、线程池的执行流程、拒绝策略以及线程池状态、Java 线程池的使用(常用的线程池、Executor 框架、ThreadPoolExecutor创建线程池、Executor 框架的继承关系)等内容。一、线程池概述池化技术现在已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池
......
345
0
0
2022-12-20
本篇内容包括:Java线程的生命周期(新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead))、Java 线程实现/创建的4种方式、终止 Java 线程4 种方式、线程的基本方法以及对守护线程的介绍。一、Java线程的生命周期当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在
......
307
0
0
2022-12-20
本篇内容包括:进程与线程&并行与并发的基本概念,Java内存模型中的内存划分、内存交互、内存交互,以及JMM的相关概念,包括了 CPU 和缓存一致性、重排序、处理器重排序与内存屏障指令、JMM 的重排序屏障、数据依赖性、as-if-serial 语句、happens-before 规则,还有JMM三大特征(原子性、可见性、有序性)。一、基本概念1、进
......
288
0
0
2022-12-20
自始至终,SpringBoot框架都是为了能够帮助使用Spring框架的开发 快速高效地构建 一个个基于Spring框架以及Spring生态体系的应用解决方案。要深刻理解SpringBoot框架,首先我们需要深刻理解Spring框架。一、Spring 中的 IoC、DI 和 DL部分Java开发者对 IoC 和 DI 的概念有些混淆,认为二者是对等的,实际I
......
287
0
0
2022-12-20
垃圾回收机制是由垃圾收集器Garbage Collection GC来实现的,GC是后台的守护进程。它的特别之处是它是一个低优先级进程,但是可以根据内存的使用情况动态的调整他的优先级。因此,它是在内存中低到一定限度时才会自动运行,从而实现对内存的回收。这也是垃圾回收的时间不确定的原因 为何要这样设计:因为GC也是进程,也要消耗CPU等资源,如果GC执行过于频
......
309
0
0
2022-12-19
**主要结构:**堆内存、方法区、栈(说明:基于JDK1.7)堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-
......
418
0
0
2022-12-19
一、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载
......
330
0
0
2022-12-19
volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容
......
410
0
0
2022-12-19
synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中的用法。一、为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可
......
462
0
0
2022-12-19
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。那么它们产生的原因和在Java中解决的办法又是什么呢?一、内存模型的相关概念 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而
......
400
0
0
2022-12-19
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一、线程的分类我们知道计算机可以分为硬件和软件两大块,硬件是基础,软件提供实现不同功能的手段;而软件又可以分为操作系统和应用程序,操作系统专注于对硬件的交互管
......
319
0
0
2022-12-19
一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。一、进程1、什么是进程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位
......
301
0
0
2022-12-19
简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁。相反,如果保证不了每个线程都能拿到锁,也就是存在有线程饿死,那么这个锁就是非公平锁。一、引入概念1、公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进⼊队列去排队,永远都是队列的第⼀位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多,队列⾥⾯除
......
350
0
0
2022-12-19
乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。一、引入概念1、悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就
......
305
0
0
2022-12-19