睡不着.....~!
/**
* 恩,为什么要有这个类呢,因为在做stop操作的时候,首先要“通知”所有的服务实例停止服务对其进行卸载,然后要再执行doStopProcess()释放资源
* 这个时候就需要有个对象能建立起服务实例和拥有他们的服务组件之间的一个信息通道。
* 以下方法都有同步操作,但是使用场景是服务实例的数量控制,不属于高并发场景,
*
* 以下的方法实际上是在“服务组件”的生命周期的背景下,对“服务实例”的生命周期进行控制,
* 所以:这些方法的设计和调用必须是---“有序的”!要想尽各种方法保证这种调用的有序性~!!!!
*
* "Happens Before"--很有力的思考工具啊,对于“保序”的检查分析很给力啊。
*
* 实际上,该类是以“状态检查”加“同步”的手段确定以下定义方法的“保序性”!
*
* 不可能孤立的写同步代码,同步代码必须相互影响的几个方法之间进行协调,所以我们必须将这个范围控制的尽量小,尽量通过数据锁控制同步
* 从而可以在写作的过程中,得到尽可能强的确定性行为的推断。然后再是性能调优。
*
* serviceInstanceKeeper现在是在一个同步器内部,所以她的方法只可能在服务组件处于STARTED和STOPPED状态才能被调用了,减少了一个BORN状态的考虑。
*/
private final class ServiceInstanceKeeper {