gpt4 book ai didi

java - 最好在 try block 内有一个同步块(synchronized block),还是在同步块(synchronized block)内有一个 try block ?

转载 作者:IT老高 更新时间:2023-10-28 20:53:48 24 4
gpt4 key购买 nike

例如,这样更好吗?

try {
synchronized (bean) {
// Write something
}
} catch (InterruptedException e) {
// Write something
}

或者这样更好:

synchronized (bean) {
try {
// Write something
}
catch (InterruptedException e) {
// Write something
}
}

我想知道哪一个是最佳实践。显然考虑到我必须同步 try block 内的所有代码。我不是在谈论我只需要同步 try 内的部分代码的情况(在这种情况下,我认为在 try 内有同步块(synchronized block)会更好)。我怀疑我必须同步所有 try block 的情况。

最佳答案

It is better to have a synchronized block inside a try block or a try block inside a synchronized block?

除非您明确需要 catch 位于 synchronized block 中,否则我会让 synchronized 代码部分尽可能小,并且将它放在 try/catch 中。所以第一个模式会更好。然后,如果您确实需要在 catch 部分中进行操作(例如记录异常或重新中断线程,请参见下文),这些不会阻塞其他线程。

也就是说,如果 synchronized block 包含许多行(当然,这通常不是一个好主意),那么我会考虑将 try/catch block 移近引发异常的方法( prolly waitnotify)。对于大量的行,您会冒着用大的 try/catch block 来不正确地处理异常的风险。取决于这里的引用框架。

顺便说一句,请确保您至少记录中断的异常。永远不要忽视它们。您可能还想重新中断线程:

try {
...
} catch (InterruptedException e) {
// always a good pattern
Thread.currentThread().interrupt();
// handle the interrupt here by logging or returning or ...
}

关于java - 最好在 try block 内有一个同步块(synchronized block),还是在同步块(synchronized block)内有一个 try block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14944551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com