针对对象的状态性的思考。
这里看一看dubbo当中针对client的抽象,以一种client需要知道是否处于连接状态方法,isConnected为例,
其类中必须存在 connected状态变量或能够获得其连接状态的内部方法。
这里,从线程的角度思考,多个线程都有可能调用其连接方法connect,那么我们就需要考虑在这里防止重复connect,
同样的,当close的时候,我们也要考虑多线程重复close,而且,还要考虑一个线程close的时候,有其他的线程在connect,这些思考点,是决定一个类是否具有完备性,鲁棒性的,所以也很重要。
1.针对线程安全方法调用的处理
1.1 synchronized关键字防止重复处理
1.2 ReentanceLock类防止重复处理
2.针对重复一次性消费对象的处理和不是一次性消费对象的处理方式
2.1不是一次性消费的,防止重复init
2.2是一次性消费的,防止再次init
3.发送消息之前,需要判断网络程序是否真的处于连接状态吗?
4.一个线程A发送消息,但此时网络close了,那么是阻塞线程A,还是抛出异常呢?还是怎么办呢?
还有一些思考
针对一个网络程序的客户端的是否连接状态的判断依据
如果我们利用client的一个属性来记录其连接状态,那么是不准确的,因为不能保证我们的属性的值和网络状态实时同步!!!
所以,大部分程序,都会将本身类不能判断的状态,依赖在能够判断状态的对象之上。并且,这样做的话,减少了维护这个状态的代码。
写代码真的很有学问。