自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池详细解析(二)

本章我们将继续讲述线程池的源码解析给,上一章我们了解了一下Worker内部类这个用作包装线程池的工作线程的内部类。本章我们看看他的核心方法首先构造方法中将自己的状态值设置为-1表示不可中断(这里的状态是AQS的state状态值),同时设置任务将属性指向任务,并且初始化一个线程这里的线程初始化是通过线程池的线程工厂创建的。随后Worker最核心的方法则是run方法了,它表示线程执行任务的业务逻辑是怎么执行的。

2025-06-02 17:04:26 481

原创 线程池详细解析(一)

到此execute方法已经解析完毕,可以看上述流程图对整个方法的业务逻辑有一个清晰的认知。接下来我们将会讲一讲线程池的其他方法。线程池实际上使用了两种锁:一个是全局锁lock还有一个是每个Worker线程内部自带的AQS实现锁,全局锁的目的更主要是为了线程同步,而AQS锁的目的则更主要的是为了实现Worker 的状态控制。

2025-06-02 11:06:14 854

原创 阻塞队列BlockingQueue解析

阻塞队列是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除的方法。抛出异常:当队列满时候插入元素的时候则会直接抛出异常,为空时取出元素也会抛出元素。返回特殊值:这种方式不会阻塞线程而是直接返回boolean类型的值表示是否插入成功或者移除成功一直阻塞:插入或者移除的操作不满足条件的时候会进行阻塞放入Condition的队列中直到满足条件后被唤醒超时退出:进行阻塞是含有时间限制的,超出时间之后线程则会退出方法,返回boolean类型的值JDK 7 提供了 7 个阻塞队列,如下。

2025-06-01 15:18:59 937

原创 Condition源码解读(二)

本章解析Condition的signal方法,该方法用于唤醒Condition队列中的线程。

2025-05-28 21:25:08 1095

原创 LockSupport与Condition解析

剖析了Java并发包中的两个核心线程协作工具:LockSupport和Condition。LockSupport基于Unsafe类提供底层的线程阻塞(park)和唤醒(unpark)机制,支持精确线程唤醒。Condition作为更强大的wait/notify替代方案,与Lock配合使用,具有独立等待队列、灵活唤醒方式和超时机制等优势。重点分析了ConditionObject的await方法实现,包括节点加入条件队列、锁释放、线程阻塞及唤醒后的锁竞争流程,并通过生产者-消费者模型展示了Conditi

2025-05-27 21:27:26 1354

原创 并发编程艺术--AQS底层源码解析(三)

本章我们继续AQS的源码解析,ReentrantLock本身是重入锁,之前解析了很多关于ReentrantLock的源码但是可重入锁这部分却没有谈及接下来讲一下重入锁是如何实现的。

2025-05-26 20:22:28 594

原创 并发编程艺术--AQS底层源码解析(二)

上一章讲完了独占非中断获取锁的源码,本章我们来讲一讲共享锁以及中断获取锁的源码。

2025-05-25 19:55:18 1180

原创 并发编程艺术--AQS底层源码解析(一)

AbstractQueuedSynchronizer是一个抽象类,这个类的主要作用就是用来构建锁或者其他同步组件的基础框架,他的主要结构是内置一个同步状态(同步资源)int类型的成员变量,通过内置的FIFO队列来完成资源获取线程的排队工作。

2025-05-25 16:04:28 984

原创 并发编程艺术--底层原理

本章我们来讲一讲并发机制的一些底层实现原理。

2025-05-23 23:19:55 1050

原创 并发编程艺术--并发编程挑战

实际上并不是并发执行就一定能比单线程执行速度更快,比如上下文切换,死锁以及资源受限等问题都会影响到并发的性能。下面我们来一一说明。

2025-05-23 16:35:44 510

原创 并发编程实战--对象的共享

在之前章节我们知道对于并发程序可以确保原子性的方式来进行同步操作。但是同步是否成功还有另一个更为重要的方面:内存可见性。我们不仅希望防止某个线程使用对象状态而另一个线程在同时修改状态,而且希望确保当一个线程修改了对象的状态其他线程能够看到发生的状态变化。如果没有同步,那么这种情况就无法实现。

2025-05-22 19:59:29 823

原创 高性能RPC框架--Dubbo(五)

filter过滤器动态拦截请求(request)或响应(response)以转换或使用请求或响应中包含的信息。同时对于filter过滤器不仅适合消费端而且还适合服务提供端。我们可以自定义在什么情况下去使用filter过滤器如上述代码就明确的定义了filter类所使用的场景Activate注解则表示在哪种场景下去使用filter,Activate注解的属性有group,value ,order来更加精细的控制激活条件。

2025-05-21 14:36:55 834

原创 高性能RPC框架--Dubbo(四)

message模型可能不是性能最好的但是最稳定的,原因是他将主业务的received事件放在Dubbo线程上执行如果处理时间过长也不会阻塞其他线程的操作,同时对于耗时时间比较短的线程则是放在io中进行。他主要则是将所有事件处理都放给io线程池进行处理,因为本身dubbo的底层io是采用的netty线程模型来进行实现的所以性能更优秀吞吐量更高,同时需要注意的是direct适合耗时操作短的线程模型,如果耗时操作比较长就会使得io阻塞而影响整个服务的通信,适合。上述五种线程模型我们一一介绍。调用(如缓存查询)。

2025-05-20 19:59:48 1115

原创 高性能RPC框架--Dubbo(三)

如果有两个镜像环境,两个注册中心,有一个服务只在其中一个注册中心有部署,另一个注册中心还没来得及部署,而两个注册中心的其它应用都需要依赖此服务。可以让服务提供者开发方,只订阅服务(开发的服务可能依赖其它服务),而不注册正在开发的服务,通过直连测试正在开发的服务。Dubbo 支持在同一应用内配置多个注册中心,一个或一组服务可同时注册到多个注册中心,一个或一组服务可同时订阅多个中心的地址,对于订阅方而言,还可以设置如何调用来自多个注册中心的地址(优先调用某一个注册中心或者其他策略)。

2025-05-19 16:53:42 1117

原创 高性能RPC框架--Dubbo(二)

上一章节简单了介绍了三种的通信协议,本章我们详细介绍一下dubbo的通信协议。

2025-05-19 15:08:18 1166

原创 并发编程实战--线程安全性

但是需要注意的是在一个类中如果是有多个状态变量往往则是采用synchronized的代码块的形式进行同步(并不是只是修改的时候才需要同步,对于一些读取操作也是需要同步的,如果仅仅使用原子性类则无法保证同步)当我们进行设计程序的时候往往首先需要考虑线程安全的问题,原因很简单如果当初设计的时候就无法保证线程安全那么在后续程序调试的时候则会很难找出问题所在地,同时后续将线程不安全的程序改造成线程安全的程序的成本往往也是巨大的。因此线程与锁的正确的使用关乎着整个项目的健壮性与可靠性。

2025-05-18 21:12:39 381

原创 高性能RPC框架--Dubbo(一)

dubbo本身是RPC框架的落地实现但是没有具备服务管理的功能,因此需要依赖其他中间件来实现服务管理的功能。对于远程提供的服务则是采用DubboService注解来进行对外暴露的,其中registry则是表明服务注册中心的名称(对应yml中注册中心的id)原因是一个服务中可能有多个注册中心。protocol则是选择的通讯协议,registry.address则是注册中心的地址一般是什么类型注册中心协议头则会带什么。当我们进入到微服务时代的时候,服务与服务之间的调用是必不可少的。

2025-05-18 18:05:05 971

原创 JDK8新特性--Optional类

在实际业务中我们总是需要对一些数据进行判空处理,采用一些if-else进行不同逻辑的处理。而在jdk8之后推出了Optional来进行判空的处理,简化了代码的书写。Optional是一个,用于表示一个值存在或不存在。它的主要作用是解决 Java 代码中常见的(空指针异常)问题,从而使代码更加健壮和可读。

2025-05-18 15:57:02 496

原创 JDK8新特性--并发流

在前文我们介绍了stream流但是对于普通的stream流采用的则是单线程的方式进行处理任务的,而本文我们将介绍一种采用多线程的方式来处理任务的流parallelStream。

2025-05-17 23:53:39 805

原创 OpenFeign的初识

OpenFeign的初识

2025-05-16 19:47:42 529

原创 JDK8新特性--stream流常用函数

下面挑几个比较常用的stream流函数进行一一介绍。

2025-05-15 22:55:13 211

原创 JDK8新特性--stream流

stream流的思想类似于生产车间的流水线,stream流不是一个数据结构也不保存数据而是对数据的加工处理,stream类似于流水线将一个个源材料合成一个个加工品。在jdk8中采用stream流式思想可以极大的简化代码的书写。

2025-05-14 20:41:50 430

原创 JDK8新特性--方法引用

在jdk8中新加入了方法引用的新特性目的是为了简化代码的书写,一般是搭配lambda表达式一起使用。下面我们来介绍一下方法引用的用法。

2025-04-28 10:47:32 887

原创 JDK8新特性--常用的函数式接口

在jdk8中新添加了很多函数式接口,下面介绍一些常用的函数式接口。

2025-04-26 20:45:16 383

原创 JDK8新特性--接口新特性

如下图如果如果采用private修饰则会报错(只要携带。

2025-04-26 14:54:16 378

原创 JDK8新特性--Lambda表达式

在jdk1.8中新增了很多特性,其中一个很重要也是很常用的特性就是lambda表达式。他能极大程度的简化代码的书写使代码更加简洁,在工作中也经常会使用lambda表达式。(抽象方法和类则是无法使用lambda表达式)同时作为一个方法的参数的时候才能使用。lambda表达式只能使用在函数式接口而无法使用在抽象类,类中。因此对于含有一个抽象方法的接口才能去使用lambda表达式。对于lambda表达式来说则是在运行的时候会。lambda表达式的作用和匿名内部类很相似。匿名内部类可以使用抽象类,类,接口。

2025-04-25 23:20:31 456

空空如也

空空如也

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

TA关注的人

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