有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java避免死锁的“常规技术”是什么?

我在Java规范中看到了下面的语句

Programs where threads hold (directly or indirectly) locks on multiple objects should use conventional techniques for deadlock avoidance, creating higher-level locking primitives that don't deadlock, if necessary.

那么,为了避免僵局,应该遵循哪些“常规技巧”?我对此不太清楚(理解不当,需要解释)


共 (3) 个答案

  1. # 1 楼答案

    不要锁门!认真地通过将所有业务逻辑保持为单线程,我们在工作中获得了巨大的性能(10万个事务,延迟低于毫秒)

  2. # 3 楼答案

    作为一个有点抽象的建议,对此的答案可能是“制定一个处理锁的计划并坚持下去”

    简而言之,锁定的危险在于,一个线程持有锁A并试图获取锁B,而另一个线程持有锁B并试图获取锁A。正如另一个答案所指出的,避免这种情况的基本方法是以一致的顺序获取锁。然而,一个好的原则是尽量减少代码在保持锁的情况下所做的工作量。任何调用另一个函数并持有锁的代码都是一个潜在的问题:如果另一个函数试图获得另一个锁怎么办?如果其他人后来修改该函数以获得锁呢?尝试形成一个清晰的模式,明确哪些函数可以在锁定的情况下调用,哪些函数不能调用,并确保代码中的注释能够清楚地说明这一点