自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 基于动态代理 为某个类生成其子类

【代码】Java 基于动态代理 为某个类生成其子类。

2024-07-02 18:03:10 475 2

原创 8.ReentrocLock

这里非公平锁NonFairSync的源码跟之前公平锁的tryAcquire方法源码几乎一致。(1)公平锁:唯一不同的是公平锁在资源state == 0也就是没人加锁的时候,通过hasQueuedPrecessors()方法判断等待队列有没有在等待,如果有人在等待则它立马放弃去加锁。(2)非公平锁:非公平锁在state == 0 也就是没人加锁的时候,才不管你等待队列有没有人在等待,它不在乎,比较自私一点,直接就去争抢锁,成功就返回了。

2023-07-09 17:01:37 202

原创 7.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)

这一章节我们就来讲解CAS带来的另外一个问题,在并发激烈的时候,产生大量的自旋,空耗CPU的问题,以及怎么使用分段锁机制解决这个问题的,我们以LongAdder这个原子类来举例讲解。AtomicInteger的缺陷:并发竞争激烈时导致大量线程自旋LongAdder采用分段锁的思想**,去减少并发竞争的;我打个比方还是上面10000个线程并发操作,但是LongAdder内部可能有10个锁,不同的线程可能去竞争不同的锁,平均下来可能是1000个线程竞争1个锁这样;并发性能这样比起AtomicInteger可能就

2023-05-22 00:12:18 322

原创 6.Atomic原子类

包下底层的实现原理基本都是差不多的**,都是**基于volatile和CAS操作来保证线程安全的。

2023-05-21 19:05:02 168

转载 5.jdk底层工具类Unsafe

Unsafe,JVM,并发编程

2023-05-21 16:32:27 195

原创 4.volatile关键字

(只有当主存中i的值变化了之后或者第一次获取才会从主存中获取,否则是不会的,它有一个总线嗅探机制(MESI有讲),这里不详解)得到。就使用读取主内存的旧值 i = 0 ,然后执行use指令将 i = 0的值传递给线程B去进行操作了。就使用读取主内存的旧值 i = 0 ,然后执行use指令将 i = 0的值传递给线程B去进行操作了。但是这个时候**还没来的将最新的结果刷新回主内存的时候,前面去的,所以必须先执行完前面的执行之后,才能执行。的,这样它看到线程A的执行就是有序的。加上之后,线程A的指令。

2023-05-09 20:34:47 245 1

转载 3.内存屏障

强制读取主内存,强制刷新主内存的内存屏障。

2023-05-09 20:31:21 253 1

转载 2.MESI缓存一致性协议

MESI协议也叫做缓存一致性协议,主要是用来进行协调多核CPU的高级缓存的数据一致的。MESI一致性协议定义了高速缓存中数据的4种状态,分别是:M(Modified): 修改过的,只有一个CPU能独占这个修改状态,独占的意思是当有一个CPU的高速缓存数据处于这个状态的时候,其它CPU的高速缓存对这个共享的数据均不能操作;此时高速缓存中的数据发生了更新,需要被刷入主内存中。E(Exclusive): 独占状态,只有一个CPU能独占这个状态,同样当某个CPU的高速缓存的数据处于这个状态的时候,其它CPU的均不能

2023-05-09 20:25:49 334

转载 1.Java内存模型

JAVA内存模型定义了一个规范啊。那就是每个线程都有一个工作内存,线程操作共享变量的时候需要从主内存读取到工作内存,然后再传递给工作线程使用。共享变量修改后先刷新到工作内存,然后再刷新回主内存。

2023-05-09 20:19:42 67 1

原创 Park(暂停)&Unpark(恢复)线程

JUC并发编程 Park(暂停) & Unpark(恢复)

2023-05-03 21:30:37 123

原创 synchronized详解

synchronized详解

2023-04-24 01:15:22 2478 3

原创 私服的搭建

maven私服搭建(基于nexus-3.20.1)

2022-01-03 18:38:08 5235

原创 maven

maven基础,maven高级

2022-01-03 18:36:27 222

原创 JDBC基础

jdbc

2021-12-22 20:32:11 1018

原创 17 反射

反射

2021-12-20 19:56:13 542

原创 16.网络编程

网络编程

2021-12-20 19:55:23 326

原创 15 IO流

IO流

2021-12-20 19:54:43 118

原创 14.多线程

多线程

2021-12-20 19:29:10 76

原创 13.泛型

泛型

2021-12-20 19:25:58 551

原创 12.集合

集合

2021-12-20 19:22:24 367

原创 11.常用类

String、StringBuffer、StringBuilder

2021-12-20 17:22:44 193

原创 10.异常

Java异常

2021-12-20 16:50:57 334

原创 9.枚举和注解

枚举和注解

2021-12-20 16:41:31 84

原创 8.面向对象编程(高级)

面向对象编程(高级)

2021-12-19 13:24:05 110

原创 7. 面向对象编程(中级)

面向对象编程

2021-12-19 12:23:47 165

原创 6. 面向对象编程(初级)

面向对象编程

2021-12-19 11:54:46 92

原创 5.java数组

6. 数组、排序和查找1. 名词解释数组:数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。2. 数组的使用2.1 动态初始化数据类型 数组名[] = new 数据类型[大小];例子://第一种动态分配方式double score[] = new double[5];//第二种动态分配方式,先声明数组,再new分配空间double score[];score = new double[4];2.2 静态初始化数据类型 数组名[] = {元素值,元素值…};例子:

2021-12-19 09:53:57 441

原创 4. 程序控制结构

程序控制结构

2021-12-19 09:39:29 176

原创 3.运算符

运算符

2021-12-19 09:33:43 111

原创 2.Java变量

java变量

2021-12-19 09:25:51 354

原创 JAVA概述

java概述

2021-12-19 09:23:02 85

原创 递归(汉诺塔

递归(汉诺塔)public class HanNuoTa{ public static void main(String[] args) { T t = new T(); t.move(40,'A','B','C'); System.out.println("结束"); }}class T { //方法 //num 表示要移动的个数,a,b,c分别表示A塔,B塔,C塔 public void move(int num,char a,char b,char c){ //如果

2021-07-05 01:12:19 183

原创 递归(迷宫)

递归(迷宫)public class MiGong{ public static void main(String[] args) { //1. 先创建迷宫,用二维数组表 int map[][] = new int[8][7]; for(int i = 0; i < 7; i++){ map[0][i] = 1; map[7][i] = 1; } for(int i = 0; i < 8; i++){ map[i][0] = 1; map[i][

2021-07-05 01:10:59 96

空空如也

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

TA关注的人

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