future的本质就是事情交给别人来做,不管别人有没有做完,马上返回。
其实用到future的地方还是挺少的,就是session的开始 结束 和发送数据。
session的开始 结束其实对socket的处理,剩下的事情就交给ractor了,发送数据也是添加到一个sendquene,剩下的事情也是交给别人做了。
可以看到cindy的future类似jdk的future,但是多了个getSession的功能。
那为什么需要getSession的功能呢。因为future会有一些FutureListener,当future处于不同状态的时候触发FutureListener,而FutureListener的具体实现其实还是对session的操作。
可以看到future的实现类只有一个:DefaultFuture。所以分析起来还是比较容易的。
主要的字段是
private volatile Queue listeners; // lazy load
private volatile boolean completed = false;
private volatile boolean succeeded = false;
先说listeners,很明显可以添加删除listener,但是什么时候触发listener呢?是在setSucceeded方法中,会执行。
private void futureCompleted(FutureListener listener) {
try {
listener.futureCompleted(DefaultFuture.this);
} catch (Throwable e) {
caughtException(e);
}
}
其实看到FutureListener接口只有futureCompleted这一个方法。
然后是completed 和succeeded 字段。setSucceeded的时候会设置completed 为true,也会设置succeeded 为对应值。
public synchronized void setSucceeded(boolean succeeded) {
if (completed)
throw new IllegalStateException(
"can't change the state of a completed future");
completed = true;
this.succeeded = succeeded;
notifyAll();
dispatchFutureCompleted(null);
}
然后构造方法也是可以设置这两个字段的。
public DefaultFuture(Session session, boolean succeeded) {
this.session = session;
completed = true;
this.succeeded = succeeded;
}
DefaultFuture的构造方法的形式一般用于直接返回:Session 的startFuture, closeFuture有用到。抛出异常的时候也也一般是这样。
用到future的主要地方:
- 大小: 16.6 KB
- 大小: 20 KB
分享到:
相关推荐
6. **异步I/O操作**:Cindy的核心是异步I/O,这包括异步读写操作。理解如何利用Java NIO的异步特性来处理I/O请求,以及如何回调用户定义的处理函数,是深入理解Cindy的重要环节。 7. **源码结构分析**: - `...
6. **教育应用**:Cindy的设计初衷是为了教育目的,因此源码中可能包含了许多示例和教程,帮助初学者快速上手。 通过研究这个压缩包中的源码,开发者不仅可以学习到计算机图形学的基本概念,还可以了解到如何将这些...
cindy.jar 源码工具包
基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip ...
6. **线程模型(Thread Model)**:Cindy可能会采用单线程、多线程或者工作窃取模型等不同的线程模型来实现事件循环。 7. **配置和扩展性(Configuration & Extensibility)**:Cindy应提供丰富的配置选项,以便...
JAVA源码异步IO框架CindyJAVA源码异步IO框架Cindy
5. **Cindy源码分析**:通过阅读和分析Cindy的源码,我们可以深入理解其内部工作原理,包括事件循环的实现、回调机制的调度以及如何优雅地处理并发问题。这对于提升Java并发编程和系统优化的能力非常有价值。 6. **...
与传统的同步I/O模式不同,异步I/O不会在等待数据读写完成时阻塞线程,而是通过回调或者Future机制通知用户数据已经准备好。这种方式极大地提高了并发处理能力,特别适用于高并发的网络服务,如Web服务器、数据库...
在源码层面,Cindy可能采用了面向对象的设计模式,通过类和接口来封装各种IO操作和事件处理。同时,为了保持代码的可读性和可维护性,Cindy可能会遵循一定的设计原则,如单一职责原则、开闭原则等,并使用模块化设计...
Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
Packages with 71 components for all delphi versions (since D7) to build Windows 32/64 bit applications: VCL controls (labels, buttons, panels, Edits, TabControls, StaticText) with features like ...
Packages with 76 components for all delphi versions (since D7) to build Windows 32/64 bit applications: VCL controls (labels, buttons, panels, Edits, TabControls, StaticText) with features like ...
delphi 控件,优秀的界面设计工具 TcyBevel: multi colored bevels. - TcyPanel: runtime resize feature, multi colored bevels, gradient and shadow feature. - TcyAdvPanel: like TcyPanel plus wallpaper ...
《Cindy组件:全Delphi版本v3.23完整源码详解》 Cindy组件是为Delphi开发者提供的一套强大且美观的界面控件库,特别适用于那些追求个性化和高质量用户界面的项目。在"V3.23 Full Source"版本中,开发者将获得完整的...
### 6. 异步编程的最佳实践 - **避免过度异步**:不是所有操作都适合异步处理,过多的异步调用可能导致回调地狱,增加调试难度。 - **错误处理**:确保正确处理异常,避免在回调中忽视错误。 - **性能监控**:定期...
下面我们将深入探讨Java异步IO的基本概念、Cindy框架的特点以及如何使用Cindy进行实际开发。 首先,理解Java中的异步I/O。在Java标准库中,NIO(New IO)提供了一种异步I/O操作的机制。传统的Java IO基于阻塞I/O...
Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包。
6. 动画和效果组件(Animation and Effects Components):提供动态效果和动画,可以增加应用程序的视觉吸引力,提高用户体验。 7. 验证和安全组件(Validation and Security Components):用于密码输入、数据验证...
6. **多媒体支持**:对于需要音频和视频处理的应用,Cindy Components 可能提供音频播放器、视频播放器组件,甚至包括录制功能。 7. **XML和JSON处理**:现代应用中,数据交换常使用XML或JSON格式,组件可能包含...