2013-02-08 54 views
2

你好我试图使用semaphore.aqcuire()semaphore.release()同步类。我从名为ReadSerialPort的类中拨打semaphore.release(),从WriteSerialPort拨打semaphore.aqcuire(),以将电话中心连接到PC。我的问题是电话中心并不总是响应。Java:使用信号量和定时器

我想知道一种方法来设置计时器,并在时间过去后使semaphore.release()

P.S:我尝试使用TimedSemaphore类,但什么都没有发生

+5

它会是一个选项,把逻辑在收购方?有Semaphore.tryAcquire(超时) – 2013-02-08 15:54:39

+1

你描述的模式并没有什么意义。您需要确保以“正常”方式调用'release()',并根据需要在阻止呼叫时使用超时。 (如果没有代码和共享资源的概述以及它们发生了什么,很难说清如何修复你的问题。) – millimoose 2013-02-08 15:54:51

+1

在定时器上释放信号量可能会使事情以不好的方式破坏,因为我认为有一个原因它已被收购。你通常所做的就是试图用超时获得它,如果持有信号量的线程不会放弃它,就放弃它。这样,你就会知道一些事情,并不认为它是以正常方式发布的。 – 2013-02-08 15:57:24

回答

3

我的问题的答案,由Jan Goynvaeis使用semaphore.tryAcquire(10,TimeUnit.SECONDS)解决,使10秒后采集将超时。在超时后使用信号量。发布(0)来清除线程