自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CAS 的使用场景 & CAS的ABA问题的优化 以及 synchronized 的三大优化

CAS(Compare-And-Swap),是比较和交换的意思,它是一条CPU并发原语,用于判断内存中某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的.它包含了三个参数:V,A,B。V表示要读写的变量内存地址A表示旧的预期值B表示准备设置的新值。

2023-01-04 21:57:16 5668 24

原创 死锁的成因以及解决方案

死锁是一个线程加上锁了之后,解不开了在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。

2022-12-29 16:36:39 5474 13

原创 synchronized 和 ReentrantLock 的区别

2.ReentrantLock 可以实现公平锁,它默认是非公平的,在构造的时候给它传入一个参数true就变公平锁了。1.tryLock 试试看能不能加上锁,试成功了,就加锁成功,试失败了,就放弃加锁,并且还。(在开发过程中,"死等的策略"需要特别注意,tryLock就提供了应对的方法)虽然ReentrantLock有缺点,但是它有一些特定的功能是。synchronized和ReentrantLock的。(通过C++实现的),而ReentrantLock是。ReentrantLock 搭配的是。

2022-12-26 16:22:42 4791 5

原创 常见实用的锁策略详解

在我们等人的时候,对方还没有到约定地点,一直反复的打电话催促就是自旋锁,而当你发现对方还没到的时候,就在约定的地点找个地方玩手机,叫他来了再在约定的地点旁边找我们一下,多消耗一点时间,却能够用这些时间去做其他的事情,时间被利用起来了,这就是挂起等待锁。如果程序抛出了异常,没有人catch就脱离了之前的代码块,脱离了一层代码,计数器就-1,脱离到计数器为0,也就解锁了,同理加锁代码中出现异常,也是不会死锁的,因为Java使用关键字结合代码块来做解锁操作,这两种锁是站在加锁解锁的角度看待的,看的是加锁解锁的。

2022-12-22 00:14:06 5177 11

原创 阻塞队列的使用

1.线程是安全的2.当进行入队操作的时候,队列为满,入队操作就阻塞,直到队列非满的时候入队操作才完成3.当进行出队操作的时候,队列为空,出队操作就阻塞,直到队列非空的时候出队操作才完成生产者消费者模型:例如:3个人包饺子,其中有一个人需要生产饺子皮,他就是生产者,另外的两个人就是消费者,而生产者生产的饺子皮放在桌子上,桌子就是"交易场所".如果生产者生产过快饺子皮已经放满了桌子,他就能进行阻塞等待,如果是饺子皮的生产速度慢于包饺子的速度,那消费者就能够进行阻塞等待。

2022-12-19 18:45:19 6862 32

原创 CountDownLatch类的使用

CountDownLatch是一种用来控制多线程的工具类,它被称为门阀、计数器或者闭锁.

2022-12-17 20:36:42 7380 17

原创 单例模式的创建(饿汉模式&懒汉模式)

单例模式的创建(饿汉模式&懒汉模式)

2022-12-16 23:15:05 7149 11

原创 Volatile关键字的作用

volatile关键字的使用

2022-12-09 22:44:21 6484 9

原创 wait与notify的使用

wait与notify的使用

2022-12-06 23:29:20 7821 12

原创 Iterable、Collection、List 的常见方法签名以及含义

Iterable、Collection、List 的常见方法签名以及含义

2022-07-03 22:45:43 6337 3

原创 Java数组的定义与使用

一.数组的定义1.创建数组数组定义有三种方法:int[] array1 = new int[10];//前面的int[]为数组的类型,后面的int[10]为其能够存放的大小,array1为其数组名称int[] array2 = {1,2,3,4,5};int[] array3 = new int[]{1,2,3,4,5};2.初始化数组初始化数组有动态初始化和静态初始化两种动态初始化:在创建数组时,只定义数组中元素的个数,并未给里面的元素进行赋值例如:int[]

2022-05-12 11:29:40 30153 14

原创 文件操作详解(2)

1.文件的随机读取1.1 fseek根据文件指针的位置和偏移量来定位文件指针文件的默认读取是从首元素开始读取的例如:#include<stdio.h>#include<stdlib.h>int main(){ FILE* pf = fopen("test.txt", "r");//以读的方式 if (pf == NULL) { perror("fopen"); return 1; } char ch = fgetc(pf);//读取一个字

2022-04-18 14:13:06 6681 46

原创 文件操作详解(1)

文件操作详解

2022-04-16 23:50:59 6978 22

原创 简单易懂的内存函数的使用

1.memcpy该函数用来source的位置开始向后复制num个字节的数据到destination的内存位置该函数遇到'\0'的时候不会停下来如果source和destination有任何的重叠,其结果都是未定义的#include<stdio.h>#include<string.h>int main(){ char arr1[]="abcdef"; char arr2[30]={0}; memcpy(arr2,arr1,6); printf("%s\n

2022-04-13 15:24:25 7670 24

原创 C语言实现通讯录(静态版本+动态版本)

当前使用VS2019编译器首先建立2个源文件test.c和contect.c以及1个头文件contect.h一.通讯录操作菜单void menu(){ printf("******** 1.Add 2.Del ***********************\n"); printf("******** 3.Search 4.Modify ***********************\n"); printf("******** 5.Sort 6.Print

2022-04-03 23:20:06 7633 22

原创 常用字符串函数的使用

常用字符串函数的使用

2022-04-03 21:06:35 8673 14

原创 数据的存储

一.数据类型(1)整型类型:char,short,int,long这些类型还分为有符号的和无符号的,例如:signed char,unsigned char其中short,int,long这三中类型在编译器中默认为无符号的,char类型默认为有符号还是无符号的取决于编译器signed char的范围为-128到127,unsignedchar的范围为0到255(2)浮点型类型:float,double,long double(3)构造类型(自定义类型):^数组类型^结构.

2022-03-05 21:09:12 6600 1

原创 C语言中十分详细的操作符详解

一、算数操作符1.加法操作符+int a=2+3//右边的2和3相加后赋值给整形变量a,所以a的值为52.减法操作符-int a=3-2//右边的3和2相减后赋值给整型变量a,所以a的值为13.乘法操作符*int a=2*3//右边的3和2相乘后赋值给整型变量a,所以a的值为64.除法操作符/int a=7/3//右边7除以3 商2余1,将商赋值给整型变量a,所以a的值为25.求余操作符%int a=7%3//右边7模3 商2余1,将余数赋值给整型变量a,所以a的值为

2022-01-14 18:54:11 8464 20

原创 C语言的常量和类型

C语言的中各种常量和类型

2021-12-14 22:59:18 9787 4

原创 第一篇博客

简单的介绍以及未来的目标

2021-12-11 16:19:26 6979 3

空空如也

空空如也

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

TA关注的人

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