我的应用程序包含许多包含 getter 和 setter 的对象。这些对应于改变物理对象(例如,步进电机)的状态。其他线程可能会调用此对象上的方法以对步进电机执行操作——这提供了步进电机和底层硬件之间的接口。因此,例如,我们可能有一个使电机旋转 15 度的函数,或者我们可能有一个使其返回中性位置的函数。
现在,这些对象关心线程安全,但这还不够好。考虑这样一种情况:一个线程尝试将电机旋转 90 度(通过触发六个调用旋转 15 度)并且在中途,另一个线程重置电机,这意味着它只移动了 45 度。
我的设计解决方案是允许控制对象取出控制器上的锁,但我不确定如何管理它。似乎大多数 Java 锁定方法都设计为在单个方法调用上是原子的,我希望将对象锁定一段不确定的时间。
一个简单的 Java 锁是否足以达到此目的,或者有人知道更好的东西吗?我担心标准的 ReentrantLock 似乎几乎需要 try-finally 范式,这意味着我可能会在一定程度上对它进行贬低。