自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java ~ Lock ~ ReadWriteLock【源码】

ReadWriteLock(读写锁)接口在API层面定义了读写锁的概念。读写锁仅在多核处理器中提升性能。读写锁的性能提升效果会受到多方因素的影响。

2024-05-19 15:09:21 546

原创 Java ~ Lock ~ ReadWriteLock【总结】

ReadWriteLock(读写锁)接口在API层面定义了读写锁的概念。读写锁仅在多核处理器中提升性能。读写锁的性能提升效果会受到多方因素的影响。

2024-05-19 14:44:46 338

原创 Java ~ Lock【源码】

Lock(锁)接口定义了API层面上锁的概念。锁接口定义了阻塞不可中断/阻塞/特殊值/超时四种加锁形式。锁接口允许锁关联多个条件。通过添加各种维度的特性,开发者可以实现远比synchronized关键字功能更加丰富的锁接口实现类。

2024-05-05 17:26:18 630 1

原创 Java ~ Lock【总结】

Lock(锁)接口定义了API层面上锁的概念。锁接口定义了阻塞不可中断/阻塞/特殊值/超时四种加锁形式。锁接口允许锁关联多个条件。通过添加各种维度的特性,开发者可以实现远比synchronized关键字功能更加丰富的锁接口实现类。

2024-05-05 16:50:21 1110 1

原创 Java ~ Lock【目录】

Java锁框架API目录

2024-05-05 16:32:16 147

原创 Java ~ Executor ~ ScheduledExecutorService【源码】

ScheduledExecutorService(调度执行器服务)接口是ExecutorService(执行器服务)接口的子接口,在其的基础再次新增了“调度”的概念。调度执行器服务接口将“调度”概念细分为了“延迟”与“周期”两个概念。

2023-09-17 09:44:50 143

原创 Java ~ Executor ~ ScheduledExecutorService【总结】

ScheduledExecutorService(调度执行器服务)接口是ExecutorService(执行器服务)接口的子接口,在其的基础再次新增了“调度”的概念。调度执行器服务接口将“调度”概念细分为了“延迟”与“周期”两个概念。

2023-09-17 09:35:41 134

原创 Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】

PriorityBlockingQueue(优先级阻塞队列)类是BlockingQueue(阻塞队列)接口的实现类之一,基于数组实现。优先级阻塞队列类必须定义比较器或元素必须实现比较能力。优先级阻塞队列类是真正意义上的无界队列,即容量理论上只受限于堆内存的大小。优先级阻塞队列类不允许存null,或者说阻塞队列接口的所有实现类都不允许存null。优先级阻塞队列类是线程安全的,或者说阻塞队列接口的所有实现类都是线程安全的,其接口定义中强制要求实现类必须线程安全。

2023-08-06 12:41:53 213

原创 Java ~ Collection/Executor ~ PriorityBlockingQueue【总结】

PriorityBlockingQueue(优先级阻塞队列)类是BlockingQueue(阻塞队列)接口的实现类之一,基于数组实现。优先级阻塞队列类必须定义比较器或元素必须实现比较能力。优先级阻塞队列类是真正意义上的无界队列,即容量理论上只受限于堆内存的大小。优先级阻塞队列类不允许存null,或者说阻塞队列接口的所有实现类都不允许存null。优先级阻塞队列类是线程安全的,或者说阻塞队列接口的所有实现类都是线程安全的,其接口定义中强制要求实现类必须线程安全。

2023-08-06 11:47:25 577

原创 Java ~ Collection/Executor ~ DelayQueue【源码】

DelayQueue(延迟队列)类是BlockingQueue(阻塞队列)接口的实现类之一,基于数组实现,特点是元素会被延迟头部移除。延迟队列类不允许存null值,或者说阻塞队列接口的所有实现类都不允许存null值。延迟队列类是无界队列,意味着其最大容量理论上只受限于堆内存的大小。延迟队列类是线程安全的,或者说阻塞队列接口的所有实现类都是线程安全的,其接口定义中强制要求实现类必须线程安全。延迟队列类的迭代器是弱一致性,即可能迭代到已移除的元素及无法迭代到新插入的元素。

2023-07-30 14:32:34 158

原创 Java ~ Collection/Executor ~ DelayQueue【总结】

DelayQueue(延迟队列)类是BlockingQueue(阻塞队列)接口的实现类之一,基于数组实现,特点是元素会被延迟头部移除。延迟队列类不允许存null值,或者说阻塞队列接口的所有实现类都不允许存null值。延迟队列类是无界队列,意味着其最大容量理论上只受限于堆内存的大小。延迟队列类是线程安全的,或者说阻塞队列接口的所有实现类都是线程安全的,其接口定义中强制要求实现类必须线程安全。延迟队列类的迭代器是弱一致性,即可能迭代到已移除的元素及无法迭代到新插入的元素。

2023-07-30 13:16:11 160

原创 Java ~ Executor ~ ExecutorCompletionService【源码】

任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。CompletionService(完成服务)接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力,而执行器完成服务类实现了这种能力,并支持按结束(完成/异常/取消)顺序对任务进行异步“消费”。

2023-07-23 11:57:07 104

原创 Java ~ Executor ~ ExecutorCompletionService【总结】

任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。CompletionService(完成服务)接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力,而执行器完成服务类实现了这种能力,并支持按结束(完成/异常/取消)顺序对任务进行异步“消费”。

2023-07-23 11:27:41 93

原创 Java ~ Executor ~ CompletionService【源码】

任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。完成服务接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力。

2023-07-16 14:30:03 157

原创 Java ~ Executor ~ CompletionService【总结】

任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。完成服务接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力。

2023-07-16 14:23:09 237

原创 Java ~ Executor ~ FutureTask【源码】

使用CAS操作的原因是为了避免并发影响,例如存在多个线程同时取消任务或任务因为执行而状态发生改变的情况,状态值的具体修改与mayInterruptIfRunning(如果运行可能中断)参数有关,如果其为false,则将状态修改为CANCELLED(4:已取消);成功对实际执行中的任务施加中断后,还需要将状态修改为INTERRUPTED(6:已中断),该修改不会使用CAS操作,而是使用一个顺序/延迟指令完成,因为该状态只是为了流程的规范,并不会对判断造成影响。当然,按未来任务的定义,可能还没有保存任务结果。

2023-06-29 15:27:02 162

原创 Java ~ Executor ~ FutureTask【总结】

FutureTask(未来任务)类是RunnableFuture(可运行任务)接口的实现类,故而其实例为Future(未来)的同时也是Runnable(可运行)。这意味着其不仅可以代表任务,本身也可以作为任务执行。未来任务类自定义了近似于理论状态的实际状态来满足自身实现的需要。NEW(0:新)COMPLETING(1:完成中)NORMAL(2:正常)EXCEPTIONAL(3:异常)CANCELLED(4:已取消)INTERRUPTING(5:中断中)INTERRUPTED(6:已中断)

2023-06-29 14:23:41 147

原创 Java ~ Executor ~ RunnableFuture【源码】

RunnableFuture(可运行未来)接口是Future(未来)接口的子接口,因此其同样可以代表任务,并追踪/获取代表任务的执行状态/结果。为代理行为提供上下文环境并无需指定run()方法,实现可运行未来接口的核心原因是为了令未来也成为任务。

2023-06-29 13:45:05 99

原创 Java ~ Executor ~ RunnableFuture【总结】

RunnableFuture(可运行未来)接口是Future(未来)接口的子接口,因此其同样可以代表任务,并追踪/获取代表任务的执行状态/结果。为代理行为提供上下文环境并无需指定run()方法,实现可运行未来接口的核心原因是为了令未来也成为任务。

2023-06-29 13:38:08 131

原创 Java ~ Executor ~ Future【源码】

Future(未来)可以代表任务,作为与任务进行交互的入口,用于追踪/获取任务的执行状态/结果。

2023-06-29 13:23:54 122

原创 Java ~ Executor ~ Future【总结】

Future(未来)可以代表任务,作为与任务进行交互的入口,用于追踪/获取任务的执行状态/结果。

2023-06-29 13:11:17 135

原创 FFmpeg ~ 安装(附MetaRTC整合)

FFmpeg整合MetaRTC有两种方式:一是直接下载安装整合了MetaRTC的FFmpeg;二是在已安装的FFmpeg上整合。无论是哪一种,都需要重新配置/编译FFmpeg,因此两者的本质其实是一致的,故而本文会直接介绍前者的详细流程。

2023-06-29 12:18:53 1354 1

原创 Java ~ Executor ~ AbstractExecutorService【源码】

AbstractExecutorService(抽象执行器服务)抽象类是ExecutorService(执行器服务)接口的抽象实现类,其作用是对执行器服务接口的部分方法定义进行流程规划。故而即使有时父类已经基于“模板模式”对某方法进行了默认的流程规划,但部分子类出于性能上的考量还是会选择重写该方法。抽象执行器服务抽象类规划了执行器服务接口定义的所有与任务递交相关方法的运行流程,该知识点的内容会在下文详述。

2023-06-29 11:49:52 129

原创 Java ~ Executor ~ AbstractExecutorService【总结】

AbstractExecutorService(抽象执行器服务)抽象类是ExecutorService(执行器服务)接口的抽象实现类,其作用是对执行器服务接口的部分方法定义进行流程规划。故而即使有时父类已经基于“模板模式”对某方法进行了默认的流程规划,但部分子类出于性能上的考量还是会选择重写该方法。抽象执行器服务抽象类规划了执行器服务接口定义的所有与任务递交相关方法的运行流程,该知识点的内容会在下文详述。

2023-06-29 11:30:32 100

原创 Java ~ Executor ~ ExecutorService【源码】

关闭:被关闭后的执行器无法接受新递交的任务,并可自我选择是否阻止未完成的任务(即关闭前递交的,还未执行和执行中的任务)继续执行,用于执行器的内部管理;终止:终止的前提是关闭,用于表现在执行器终止后未完成任务的整体执行状态;结果:在执行器的递交基础上新增了返回值,用于监控任务的执行状态并获取任务的执行结果;类型:支持新的Callable(可调用的)接口类型的任务,在对结果的支持上更加方便;批量:支持任务的批量执行,用于提升任务的递交及执行效率。

2023-06-29 10:22:17 116

原创 Java ~ Executor ~ ExecutorService【总结】

关闭:被关闭后的执行器无法接受新递交的任务,并可自我选择是否阻止未完成的任务(即关闭前递交的,还未执行和执行中的任务)继续执行,用于执行器的内部管理;终止:终止的前提是关闭,用于表现在执行器终止后未完成任务的整体执行状态;结果:在执行器的递交基础上新增了返回值,用于监控任务的执行状态并获取任务的执行结果;类型:支持新的Callable(可调用的)接口类型的任务,在对结果的支持上更加方便;批量:支持任务的批量执行,用于提升任务的递交及执行效率。

2023-06-29 10:15:25 914

原创 Java ~ Reference ~ WeakReference【总结】

WeakReference(弱引用)类是Reference(引用)抽象类的四大子类之一,只被弱引用持有的对象被称为弱可达(weakly reachable)对象。弱引用与无引用的等价性仅限于GC方面,即两者都不会成为GC回收对象的影响因素;但访问方面,软引用则与强引用等价,即两者都可以成为对象的访问通道。弱引用类常用于帮助GC回收。

2023-06-18 14:16:48 948

原创 Java ~ Reference ~ SoftReference【总结】

SoftReference(软引用)类是Reference(引用)抽象类的四大子类之一,只被软引用所持有的对象被称为软可达(softly reachable)对象。软引用类适用于缓存。

2023-06-18 13:53:30 848

原创 Java ~ Reference ~ ReferenceQueue【总结】

ReferenceQueue(引用队列)类是Reference(引用)框架中专门设计用来与Reference(引用)抽象类配合使用的队列,采用链表的方式以实现。其作用是追踪引用的所指对象的GC状态,即判断所指对象是否已/会被GC回收。引用队列类的是无界队列,即容量理论上只受限于内容大小。引用队列类的本质是堆栈。引用队列类是线程安全的。引用队列类并不是Collection(集)框架的成员。

2023-06-11 18:44:30 987

原创 Java ~ Reference ~ PhantomReference【总结】

PhantomReference(虚引用)类是Reference(引用)类的四大子类之一,只被虚引用持有的对象被称为虚可达(phantom reachable)对象。虚引用类被设计专用于跟踪对象的GC状态,即判断对象是否已/会被GC回收。虚引用类有两个特点:一是必须与引用队列搭配使用,这与其本身的作用相关;二是其get()方法无法获取所指对象,即使其没有被GC回收。虚引用类可作为finalize()方法的替代方案。

2023-06-11 18:24:59 985

原创 Java ~ Reference ~ Finalizer【总结】

Finalizer(终结者)类是FinalReference(终引用)类的唯一子类,同时也是Finalization(终结)机制的具体定义及实现者。终结者类必须搭配引用队列使用,并且所有终结者都会固定将f-queue作为自身的注册引用队列。当F类对象被创建时,JVM会自动将之作为所指对象创建终结者。f-queue的本质其实就是在终结者类中创建的全局唯一引用队列,由于其在终结机制中发挥了重要作用,因此在JVM相关书籍中将之命名为了f-queue。

2023-06-11 17:07:44 961

原创 Java ~ Reference ~ FinalizerHistogram【源码】

FinalizerHistogram(终结者柱状图)类用于支持GC.finalizer_info诊断命令,由虚拟机进行调用。终结者柱状图类的作用是统计Finalizer(终结者)总数,其会以终结者所指对象/F类对象的类为维度对f-queue中的终结者进行统计,返回倒序排序(即从大到小)的终结者总数统计结果,以支持GC.finalizer_info诊断命令。

2023-06-11 16:36:22 699

原创 Java ~ Reference ~ FinalizerHistogram【总结】

FinalizerHistogram(终结者柱状图)类用于支持GC.finalizer_info诊断命令,由虚拟机进行调用。终结者柱状图类的作用是统计Finalizer(终结者)总数,其会以终结者所指对象/F类对象的类为维度对f-queue中的终结者进行统计,返回倒序排序(即从大到小)的终结者总数统计结果,以支持GC.finalizer_info诊断命令。

2023-06-11 16:11:44 997

原创 Java ~ Reference ~ FinalReference【源码】

FinalReference(终引用)类是Reference(引用)抽象类的四大子类之一,被作用于实现Java的Finalization(终结)机制。终引用类必须搭配引用队列使用,该特性与PhantomReference(虚引用)类一致。终引用类最大的特点在于其所指对象的回收时机与其它子类不同。终引用类的存在是为了实现终结机制而提供对对象生命周期的干预机制,即影响对象的回收时机,而实际真正实现该机制的是其子类Finalizer(终结者),Java终结机制正是通过终结者类与底层逻辑相互配合实现的。

2023-06-11 16:02:18 802

原创 Java ~ Reference ~ FinalReference【总结】

FinalReference(终引用)类是Reference(引用)抽象类的四大子类之一,被作用于实现Java的Finalization(终结)机制。终引用类必须搭配引用队列使用,该特性与PhantomReference(虚引用)类一致。终引用类最大的特点在于其所指对象的回收时机与其它子类不同。终引用类的存在是为了实现终结机制而提供对对象生命周期的干预机制,即影响对象的回收时机,而实际真正实现该机制的是其子类Finalizer(终结者),Java终结机制正是通过终结者类与底层逻辑相互配合实现的。

2023-06-11 15:50:43 1136

原创 Java ~ Reference ~ Cleaner【源码】

清洁工类是专门为了替代Finalization(终结)机制/finalize()方法而实现的,学习者很容易冒出这个想法...该想法是否正确暂且不论,但清洁工类确实实现了与终结机制/finalize()方法相同的功能,即在所指对象被GC回收时执行自定义操作。清洁工类继承自虚引用类,这意味着其本身也是一个虚引用。不推荐使用清洁工。

2023-06-11 15:39:15 1289 1

原创 Java ~ Reference ~ Cleaner【总结】

清洁工类是专门为了替代Finalization(终结)机制/finalize()方法而实现的,学习者很容易冒出这个想法...该想法是否正确暂且不论,但清洁工类确实实现了与终结机制/finalize()方法相同的功能,即在所指对象被GC回收时执行自定义操作。清洁工类继承自虚引用类,这意味着其本身也是一个虚引用。不推荐使用清洁工。

2023-06-11 15:09:32 1534

原创 Java ~ Reference【总结】

在JDK1.2之前,Java中引用的定义是十分传统的。引用抽象类是强引用之外引用(下文简称特殊引用)概念的实质化产物,其作用在于定义并实现了特殊引用的生命周期及运行流程,使得特殊引用不再是一个虚幻的设想,而是实际独立于强/无引用之外的第三存在,为软、弱等具体特殊引用实现提供了实质性基础。事实上,作为API层面上的实现,单纯依靠引用抽象类是无法实现特殊引用的,需要JVM层面(GC)的配合。因此,与其说引用抽象类实现了特殊引用,倒不如说其为GC分辨特殊引用提供了判断依据更加合适。

2023-03-19 16:03:25 406

原创 Java ~ Reference【目录】

一 Reference(引用)一 Reference(引用)

2023-03-19 15:57:52 157 1

原创 Java ~ Collection/Executor ~ ArrayBlockingQueue【总结】

ArrayBlockingQueue(数组阻塞队列)类(下文简称数组阻塞队列)是BlockingQueue(阻塞队列)接口的主要实现类之一,也是Executor(执行器)框架常用的实现之一,采用数组的方式实现。数组阻塞队列类不允许存null值。数组阻塞队列类只能作为有界队列使用。数组阻塞队列类是线程安全的。数组阻塞队列类支持公平访问策略。数组阻塞队列类的迭代器是弱一致性。

2023-03-19 15:11:32 357

空空如也

空空如也

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

TA关注的人

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