我们继续为AMQConnection扫盲,另一个成员变量类BlockingCell ,阻塞元件,一次性写入,到处使用。
- 它是一个简单one-shot IPC机制,这个是一个地方缓存区,一旦填满就不能清除,也不能设置新的值
1、成员变量和常量
| 名称 | 默认值 | 描述 |
|---|---|---|
| boolean _filled | false | 表示某个值是否填充了标记 |
| T _value | 就填充值变量 | |
| final long NANOS_IN_MILLI | 1000L*1000L | 1毫秒对应纳秒 |
| final long INFINITY | -1 | 无穷 |
2、方法
| 方法名 | 描述 | 图示 |
|---|---|---|
| public BlockingCell(){} | 构造方法 | |
| synchronized T get() | 获取值,如何填充值就一直等待 | |
| synchronized T get(long timeout) | 超时等待获取值,-1表示永久等待,如果超时还未填充值就抛出超时异常(时间为毫秒) | |
| synchronized T uninterruptibleGet() | 相当于get()方法,它增强了它忽略线程打断操作 | |
| synchronized T uniterruptibleGet(int timeout) | 相当于get(long timeout)方法,它增强了它忽略在超时间内线程打断操作 | |
| synchronized void set(T newValue) | 只能被设置一次,设置完之后通过getXXX获取值 | |
| synchronized boolean setIfUnset(T newValue) | 加了预先判断,避免直接抛出异常 |
3、总结
- 一次设置,多次取用,有点类似ROM光盘一样的
这篇博客介绍了AMQConnection中BlockingCell类的详细功能,它是一个简单的one-shot IPC机制,用于一次性写入并多次读取。成员变量包括填充标志和值,以及超时相关的常量。提供了get()、get(long timeout)等同步方法来获取值,set()方法用于设置值,且只能设置一次。总结来说,BlockingCell类似于只读存储,一旦设置不可更改,适合一次性写入、多次读取的场景。

被折叠的 条评论
为什么被折叠?



