当前位置: 首页 > 面试题库 >

Java中是否有Mutex?

黄涵畅
2023-03-14
问题内容

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()



 类似资料:
  • 问题内容: 我需要为正在使用的API 指定一个,但实际上不需要输出。Java是否具有等同于? 问题答案: 从Java 11开始,有一个静态工具可以完全满足您的需要,它是一个静态工厂方法: 返回一个丢弃所有字节的新OutputStream。返回的流最初是打开的。通过调用close()方法关闭流。随后对close()的调用无效。

  • 问题内容: 我想拥有一个与BlockingQueue非常相似的BlockingMap数据结构。BlockingQueue的take方法将在那里等待,直到元素可用。我希望BlockingMap的get方法在那里等待,直到相应的键可用为止?我可以使用这种数据结构吗? 问题答案: 我过去只是用过。但是最近,我遇到了这个Java的Blocking Map 。不过,我自己还没有使用过。

  • 问题内容: 我想用二进制文字声明我的整数。Java可能吗? 问题答案: 从Java 7开始,您可以使用(或)形式将整数直接表示 为二进制数字 ,后跟一个或多个二进制数字(0或1)。例如,是整数42。与八进制和十六进制数字一样,二进制文字可能表示负数。 如果您没有Java 7,请使用以下命令: 还有其他输入整数的方法: 如十进制数字,。负十进制数,例如实际上是由一元否定运算的整数文字组成的表达式。

  • 问题内容: 我了解到,浮点数s在Java中的符号为零。但恐怕还没有: 与 如何存储零值符号? 问题答案: 您不能使用Java整数基元类型存储符号。 负零是IEEE-754表示的伪像,它将符号存储在单独的位中。另一方面,整数以二进制补码表示形式存储,补码表示形式具有唯一的零表示形式。

  • 问题内容: 我目前正在为一个项目创建REST-API,并且一直在阅读有关最佳实践的文章。许多人似乎反对DTO,只是公开域模型,而其他人似乎认为DTO(或用户模型或任何您想称呼的东西)是不好的做法。我个人认为这篇文章很有道理。 但是,我还了解了DTO的所有额外映射代码,域模型可能与其DTO对应对象100%相同的缺点等。 我们主要创建API,以便其他客户端可以使用数据,但是,如果操作正确,我们也将尽可

  • 问题内容: Java是否具有在hibernate状态下打开会话时可以使用的using语句? 在C#中,它类似于: 因此,对象超出范围并自动关闭。 问题答案: Java 7引入了自动资源块管理,该功能将该功能引入了Java平台。Java的早期版本没有任何相似之处。 例如,您可以使用以以下方式实现的任何变量: 由流实现的Java 接口自动扩展,因此您可以像在C#块中使用流一样使用块中的流。这等效于C#