那些值得思考的代码逻辑-对象状态和对象状态的迁移

本文探讨了在Dubbo框架中,如何管理客户端的连接状态,确保线程安全及处理多线程环境下连接与关闭操作的正确性。通过分析网络程序的连接状态判断依据,讨论了使用synchronized关键字和ReentrantLock类防止重复处理的方法。

针对对象的状态性的思考。

 

这里看一看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的一个属性来记录其连接状态,那么是不准确的,因为不能保证我们的属性的值和网络状态实时同步!!!

所以,大部分程序,都会将本身类不能判断的状态,依赖在能够判断状态的对象之上。并且,这样做的话,减少了维护这个状态的代码。

 

写代码真的很有学问。

转载于:https://www.cnblogs.com/weiguangyue/p/9902885.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值