程序包 cn.wjybxx.concurrent
package cn.wjybxx.concurrent
-
类说明默认的实现仅仅是简单的将任务分配给某个
EventLoop执行future的聚合选项如果一个操作可能导致死锁状态将抛出该异常 通常是因为监听者和执行者在同一个线程,监听者尝试阻塞等待结果。该接口用于特殊需求时减少闭包取消令牌源由任务的创建者(发起者)持有,具备取消权限。Context<T>默认上下文实现借鉴于Netty的DefaultThreadFactory 和JDK的Executors中的DefaultThreadFactory实现DisruptorEventLoop<T extends IAgentEvent>基于Disruptor框架的事件循环。EmptyAgent<T>事件循环 它是单线程的,它保证任务不会并发执行,且任务的执行顺序和提交顺序一致。Agent是EventLoop的内部代理,是EventLoop的内部策略实现,通常不暴露给EventLoop外部EventLoopBuilder<T extends IAgentEvent>EventLoopBuilder.DisruptorBuilder<T extends IAgentEvent>事件循环选择器,用于负载均衡和确定选择。事件循环线程组,它管理着一组EventLoop。事件循环的模块 1.该接口为标记接口,具体的行为由子接口决定。EventLoop的状态 -- UniExecutor也使用该枚举。提供转发功能的基类 由于Future中存在取消接口,因此该类还不是Readonly的。在调用选择方法之前,你可以添加任意的IFuture以进行监听。该类用于打印并发库中的错误日志该handler只应该输出日志受保护的操作,与BlockingOperationException成一对。EventLoopAgent接收的事件类型取消令牌取消令牌源由任务的创建者(发起者)持有,具备取消权限。线程控制异步任务的上下文 在异步和并发编程中,共享上下文是很必要的,且显式的共享优于隐式的共享。命名:我们使用清晰的命名后缀,以免使用lambda时的语义不清。IFuture<T>1.Future是任务和用户之间通信的媒介。IFutureTask<V>FutureTask是Executor压入的可获取结果的任务类型 1.该接口暴露给Executor的扩展类,不是用户使用的类。IPromise<T>不继承ScheduledExecutorService,JDK的ScheduledFuture设计有问题。定时任务关联的Future。可获取结果的延时任务定时任务关联的PromiseTask是Executor中调度的任务抽象。在调用选择方法之前,你可以添加任意的CompletableFuture以进行监听。提供最小支持的AgentEvent满足最小需要的Context实现。Promise<T>声明IFuture接口加快instanceof测试PromiseTask<V>ps:该类的数据是(部分)开放的,以支持不同的扩展。为IPromise提供只读视图当提交的任务被拒绝时的处理策略,修改自JDK的或者说Netty的拒绝策略。被缓存的事件对象 1.用于Disruptor或类似的系统,当我们缓存对象时,更适合将字段展开以提高内存利用率 2.这只是个简单的数据传输对象,getter/setter什么的不必要 3.实现Runnable以支持直接提交到Executor4.支持EventLoopAgent的都将支持该事件。定时任务的Task抽象 这个实现有较多特殊逻辑,不适合对外该对象为临时对象,应避免共享一个简单的Watcher管理器 由于多用在多线程环境下,因此提供了缓存行填充特性单线程的Executor用于表示EventLoop启动失败TaskBuilder<V>任务构建器该异常表示FutureCombiner监听的任务数不足以到达成功条件任务调度选项JDK设定的任务状态Future.State并未将【等待中】和【执行中】这两种状态分开, 大多数情况下这种设定并没有影响,但在涉及取消时,将等待中和执行中分开是有利的。超时管理上下文可分时运行的任务 - 需要长时间运行才能得出结果的任务。WatcherMgr<E>Watcher管理器实现时要小心线程安全问题