自定义博客皮肤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)
  • 收藏
  • 关注

原创 CopyOnWriteArrayList类小记

CopyOnwriteArrayList是JUC中提供的一个并发容器,它是一个线程安全且读操作无锁的ArrayList,写操作是通过创建底层数组的新副本来实现,实现了读写分离的并发策略。类似的容器还有CopyOnWriteSet。实现原理:该容器允许并发读,读操作无锁,性能较高。写操作时,如向容器中添加一个元素,则**首先将当前容器复制一份,在新副本上添加新元素,最终再将原容器的引用指向新容器。所涉及写操作的方法均使用了 ReentrantLock **。优缺点优:Copy适合读多写少的并发场

2021-08-19 17:49:04 170

原创 多线程通信小记

文章目录1. 多线程编程步骤2. 线程虚假唤醒3. Intel 的 MESI 协议中的缓存一致性原理4. 并发编程三大基本概念与理解4.1 原子性4.2 可见性4.3 有序性1. 多线程编程步骤创建资源类,在资源类创建属性和操作方法在资源类操作方法判断执行任务通知创建多个线程,调用资源类的操作方法2. 线程虚假唤醒​ 如,现有诸多线程的唤醒的条件均为条件a,而其中某个线程(称线程A)的操作是将条件改为b,那么当条件a确定时,这些线程可能会被同时唤醒(notifyAll/sign

2021-08-13 10:32:21 239

原创 Lock 与 sychronize 简析

@[TOP]1.1 与 synchronized 对比Lock 锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。Lock 提供了比 synchronized 更多的功能。区别:Lock 非 Java 语言内置的是一个类, synchronized 是 Java 语言的关键字,incident是内置特性。synchronized 不需要手动释放锁,当其修饰的部分执行完后,线程自动释放锁。Lock 必须手动释放锁

2021-08-11 11:20:11 800

原创 整数二分法查找

二分法查找的前提是序列“有序”。二分法查找可以确定某种性质在序列中的边界。当确定该性质的左边界时 ([l,r][l,r][l,r]被分为[l,mid][l,mid][l,mid]和[mid+1,r][mid+1,r][mid+1,r])while (l < r){ int mid = l + r >> 1;//下取整 if (check(mid)) r = mid; else l = mid + 1;}当确定该性质的右边界时 ([l,r][l,r][l,r]被分为[

2021-07-21 19:14:09 427

原创 CSAPP精读笔记-第1章 计算机系统漫游

第一章 计算机系统漫游1.1信息即位+上下文#include <stdio.h>int main(){ printf("Hello World\n"); return 0;}用C语言编写一个可以打印输出Hello World的程序,而这个程序的大致生命周期为创建、编译、运行和结束。其生命周期是从***源程序***开始的,文件名定为 hello.c 。源程序由文本字符组成,每个文本字符由字节表示,1字节为8位(8bits)。hello.c 程序是以字节序列的方式储存在

2021-07-15 00:23:10 459

原创 并发、并行、异步和同步之间的区别与联系

计算机并发(Concurrency),表示计算机能过同时进行多项任务计算机并发方式有多种:如单核CPU分配时间片的方式,使不同的任务往复交替切换执行。该过程也叫进程或线程的上下文切换(context switching)。但对于多核处理器,可通过任务分配多个核同时执行,即为并行(Parallelism)同步(Synchronous),代表需要等到必须前一个任务执行完毕之后,才能进行下一个任务。因此在同步中,并没有并发或者并行的概念。异步(Asynchronous),代表不同的任务之间并不会相互等待。

2021-05-15 17:20:24 1218

原创 使用AutoCloseable实现自动关闭资源

目录1 Autocloseable接口简介2 代码演示2.1 自定义类2.2 用例1 Autocloseable接口简介出现自jdk 1.7一个可以一直保存资源(如文件或socket句柄)的直到关闭的对象。当退出try-with-resources块时,自动调用AutoCloseable对象的close()方法。这种构造确保了资源可以及时释放,避免了可能发生的资源耗尽异常和错误。注意对于必须完全通用地运行的代码,或当知道AutoCloseable实例需要释放资源时,建议使用try-with-re

2021-05-15 15:16:27 573

原创 Java 泛型自学笔记

文章目录Java 泛型一、概论1. 设计背景2. 概念二、集合中使用泛型三、自定义泛型结构四、泛型在继承上的体现五、通配符的使用Java 泛型一、概论1. 设计背景集合容器类在设计阶段/声明阶段不能确定这个容器倒是实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5后使用泛型来解决。因为这个适合除了元素的类型不确定,其他部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数就是泛型。Collection,

2021-03-30 23:56:54 118

原创 Java 集合学习笔记

文章目录Java 集合(容器)一、Java 集合框架概述二、Collection 接口方法三、Iterator 迭代器接口1. 使用 Iterator 接口遍历集合元素2. Iterator 接口的方法3. 使用 foreach 循环遍历集合元素四、Collection 子接口一:List1. List 接口概述2. List 接口方法3. List 实现类之一:ArrayList(主要)4. List 实现类之二:LinkedList5. List 实现类之三:Vector6. List 三种实现类的异

2021-02-21 11:29:33 196

原创 Java枚举类与注解

Java枚举类与注解一、枚举类1. 枚举类的使用类的对象只有有限个,确定的。我们称此类为枚举类当需要定义一组常量时,强烈建议使用枚举类如果枚举类种只有一个对象,则可以作为单例模式的实现方式2. 如何自定义枚举类(jdk5.0之前)步骤声明自定义枚举类对象的属性:private final私有化类的构造器,并给对象属性赋值提供当前枚举类的多个对象: public static final 的其他诉求如: 获取枚举类对象的属性, toString方法等class Se

2021-02-04 11:12:40 270

原创 Java两个比较器

Java两个比较器一、自然排序:Comparable接口java.lang.ComparableComparable 接口强行对实现它的每个类的对象进行整体排序(被称为,类的排序)。重写 compareTo(Object obj) 方法的规则(两个对象通过该方法的返回值来比较大小):如果当前对象this大于形参对象obj,则返回正整数;如果当前对象this小于形参对象obj,则返回负整数;如果当前对象this等于参数对象obj,则返回零。//String类中对compareT

2021-02-02 11:51:00 680 1

原创 Java多线程基础知识笔记

多线程基础知识笔记一、线程1.基本概念程序(program):是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process):是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程(生命周期)。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。线程(tread):进程可以进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程的。线程作为调度

2021-01-24 15:02:21 140

原创 Java基础知识点总结笔记

Java基础Java常用内存区域栈内存空间:存储引用堆内存空间的地址堆内存空间:保存每个对象的具体属性内容全局数据区:保存static类型的属性全局代码区:保存所有的方法定义this关键字表示该类的属性变量:this.变量名调用本类的构造方法:this()表示当前类,可调用成员方法:this.成原方法名()static关键字声明属性,使之独立于对象,成为全局属性(亦称静态属性)声明方法,使之成为"类方法",可直接通过类名调用:<类名>.<

2021-01-16 15:42:27 1358 2

原创 【C语言】关键路径/最长路径模拟实现

一、问题描述1.拓扑排序:在AOV网中为了更好地完成工程,必须满足活动之间先后关系,需要将各活动排一个先后次序即为拓扑排序。拓扑排序可以应用于教学计划的安排,根据课程之间的依赖关系,制定教学课程安排计划。按照用户输入的课程数,课程间的先后关系数目以及课程两两间的先后关系,程序执行后应该给出符合拓扑排序的课程安排计划。例如下图所示的课程优先关系:程序执行后应该给出拓扑排序的结果为:(C1,C2,C3,C4,C5,C7,C9,C10,C11,C6,C12,C8)或者(C9,C10,C11, C6,

2021-01-11 16:04:02 3165 4

转载 【C语言】数组名与取数组首地址的区别

一般情况下声明一个数组之后,比如int array[5],数组名array就是数组首元素的首地址,而且是一个地址常量。但是,在函数声明的形参列表中除外。在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。——《C和指针》在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的.

2020-09-02 15:23:43 653

原创 c语言-函数传递数组问题

题目:定义一个函数,使用二维数组作为传入参数,在主函数中输入4×4的二维数组,调用已定义的函数,把该矩阵传入,在主函数中输出结果。函数功能:使二维数组中两条对角线上的元素均为1,其余元素均为0。解:int diagonal_assignment(int a[4][4]){ int i, j; for (i=0; i<4; i++) { for (j=0; j<4; j++) { if (i==j || i+j==3) { a[i][j] = 1; }else{

2020-05-31 13:42:34 1111

空空如也

空空如也

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

TA关注的人

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