Java:使用信号量和定时器
问题描述:
你好我试图使用semaphore.aqcuire()
和semaphore.release()
同步类。我从名为ReadSerialPort
的类中拨打semaphore.release()
,从WriteSerialPort
拨打semaphore.aqcuire()
,以将电话中心连接到PC。我的问题是电话中心并不总是响应。Java:使用信号量和定时器
我想知道一种方法来设置计时器,并在时间过去后使semaphore.release()
。
P.S:我尝试使用TimedSemaphore
类,但什么都没有发生
答
我的问题的答案,由Jan Goynvaeis使用semaphore.tryAcquire(10,TimeUnit.SECONDS)解决,使10秒后采集将超时。在超时后使用信号量。发布(0)来清除线程
它会是一个选项,把逻辑在收购方?有Semaphore.tryAcquire(超时) – 2013-02-08 15:54:39
你描述的模式并没有什么意义。您需要确保以“正常”方式调用'release()',并根据需要在阻止呼叫时使用超时。 (如果没有代码和共享资源的概述以及它们发生了什么,很难说清如何修复你的问题。) – millimoose 2013-02-08 15:54:51
在定时器上释放信号量可能会使事情以不好的方式破坏,因为我认为有一个原因它已被收购。你通常所做的就是试图用超时获得它,如果持有信号量的线程不会放弃它,就放弃它。这样,你就会知道一些事情,并不认为它是以正常方式发布的。 – 2013-02-08 15:57:24