自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ThreadLocal原理分析和使用

先介绍一下弱引用结果可以看到System.gc();执行后只清理了不存在强引用只存在弱引用的对象referent,说明只存在弱引用的对象在System.gc后会被jvm清理。

2024-06-28 02:09:59 403 1

原创 synchronized原理

对象中用锁标志位来标识监视器锁的类型,锁升级只能从低到高,即只能从无锁->偏向锁->轻量锁->重量锁。

2024-06-28 02:09:28 323

原创 cas原理

CAS (compareAndSwap),中文叫比较交换,是一种无锁原子算法,映射到操作系统就是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,其实现方式是基于硬件平台的汇编指令,在intel的CPU中,使用的是cmpxchg指令,就是说CAS是靠硬件实现的,从而在硬件层面提升效率。执行过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。

2024-06-28 02:08:55 376

原创 volatile原理

volatile修饰的变量与普通变量的区别体现在可见性和有序性上。

2024-06-28 02:08:23 182

原创 线程(四)-定时器

【代码】线程(四)-定时器。

2024-06-27 12:40:24 79

原创 线程(三)-线程中断

有些阻塞方法可以被interupt方法中断执行,一般进入WAITING或者TIMED_WAITING状态的方法都可以被中断。

2024-06-27 12:39:51 235

原创 线程(二)-线程状态

总共有6中:NEW :未启动的线程RUNNABLE :可运行的线程,需要等待操作系统资源BLOCKED :等待监视器锁而被阻塞的线程WAITING:等待唤醒状态,无限期地等待另一个线程唤醒TIMED_WAITING:在指定的等待时间内等待另一个线程执行操作的线程;TERMINATED :已退出的线程。

2024-06-27 12:39:19 473

原创 线程(一)-线程创建

Callable可以获得线程执行的结果。Runnable线程不能获得结果。

2024-06-27 12:38:46 189

原创 Idea(一):新能源汽车畅想

俗话说:人类跑步百公里只需要消耗两个馒头,我们是否可以使用有机物来提供能源,答案当然是坑定的,下面我们就来分析以下这种有机能源的优点以及可行性。

2024-06-15 00:04:52 180

原创 grub2系统引导

1 UEFI 主板会检查 NVRAM 中存储的启动项,如果找到了合适的启动项,UEFI 主板会根据该项来启动系统 (硬盘使用GPT分区表或者混合分区表(Hybrid MBR))NVRAM中每个启动项都配置了磁盘+分区UUID+文件路径,可以使用efibootmgr来查看和编辑这些启动项,也可以进BIOS配置。2.4.2 在另一块硬盘建立grub,参数为–efi-diretory --boot-directory,使用–removable。由于启动项被破坏,导致系统无法启动,可以通过命令手动加载启动项。

2024-04-21 18:10:55 1095 1

原创 safe-rm防止误删

在使用rm命令,一不小心使用rm -rf /*就要删库跑路了,所以为了避免发生误删除操作,可以使用safe-rm来禁止对某些文件或目录使用rm操作。

2024-04-20 22:45:30 181

原创 Linux找回误删文件

当不小心使用rm -rf /*删除了文件之后,数据就这么丢了吗?当然不会,下面介绍几种方法,有可能恢复文件,但是也不一定能成功,笔者就有一次这种经历,试了几种方法后,最终只有testdisk的photorec才把文件恢复了,但是恢复的文件文件名都不是原来的名字了(内容还是不变的),最后写了程序来解析这一堆文件,才勉强找回了部分丢失的文件,满满都是泪,所以还是要记得备份。

2024-04-20 22:44:04 763

原创 Netty并发(二)-select&wakeup

【代码】Netty并发(二)-select&wakeup。

2024-04-19 02:13:32 119 1

原创 Netty并发(一)-DefaultPromise

【代码】Netty并发(一)-DefaultPromise。

2024-04-19 02:12:01 188 1

原创 线程池(二)-submit源码分析

Future.get() 方法等待Runnable.run()执行完成或者被Future.cancel()执行后才能继续执行。1和2的情况需要对完成标志的修改做访问控制。这就是场景2的类型2的情况。

2024-04-19 02:07:20 183 1

原创 线程池(一)-源码分析

线程结束执行processWorkerExit方法。控制线程的数量就是通过新增线程和线程停止来控制的。

2024-04-19 02:05:47 288 1

原创 AQS详解(五)-并发工具类源码分析

获取锁的线程可以独占访问临界区资源,其他线程不能访问临界区资源。

2024-04-19 02:02:55 261 1

原创 AQS详解(四)-公平锁与锁重入

公平锁保证先进入CLH队列的节点有优先执行权,而非公平锁只要资源充足拥有相同的执行权。

2024-04-19 02:01:05 213 1

原创 AQS详解(三)-中断与超时

当线程使用LockSupport.park挂起的时候,可能是被中断或超时唤醒,而不是被另一个线程通过LockSupport.unpark唤醒,所以在线程被唤醒的时候判断是因为那一种情况唤醒,从而使用不同的处理方式。

2024-04-19 02:00:10 185

原创 AQS详解(二)-Condition源码分析

await方法等待signal方法或transferAfterCancelledWait方法把节点从Condition队列转移到AQS队列后执行。无论是被中断唤醒还是被signal方法唤醒,最终节点都转移到了AQS队列,所以只需要调用acquireQueued排队取出节点来执行就行了。只有compareAndSetWaitStatus(node, Node.CONDITION, 0)执行成功的线程才能执行转移操作。1和2都可能发生节点转移,必须保证只有一个可以成功。这是场景2中类型2的情况。

2024-04-19 01:58:41 141

原创 AQS详解(一)-源码分析

这是场景2的类型1,多个线程竞争头节点和尾节点。这是场景1的情况,完成状态是head。

2024-04-19 01:56:00 307 1

原创 并发场景&通用实现方案

并发程序通用设计方案

2024-04-19 01:54:25 326

空空如也

空空如也

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

TA关注的人

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