Java中是否有Mutex对象或一种创建对象的方法?我问是因为用1许可初始化的Semaphore对象对我没有帮助。考虑这种情况:
try { semaphore.acquire(); //do stuff semaphore.release(); } catch (Exception e) { semaphore.release(); }
如果在第一次获取时发生异常,则catch块中的释放将增加许可,并且该信号量不再是二进制信号量。
正确的方法是吗?
try { semaphore.acquire(); //do stuff } catch (Exception e) { //exception stuff } finally { semaphore.release(); }
上面的代码是否可以确保信号量是二进制的?
看到此页面:http : //www.oracle.com/technetwork/articles/javase/index-140767.html
它有一个稍微不同的模式,这是(我认为)您要寻找的内容:
try { mutex.acquire(); try { // do something } finally { mutex.release(); } } catch(InterruptedException ie) { // ... }
在这种用法中,您仅release()在成功呼叫之后acquire()
release()
acquire()