use*_*212 20 java multithreading try-catch synchronized-block
例如,这更好吗?
try {
synchronized (bean) {
// Write something
}
} catch (InterruptedException e) {
// Write something
}
Run Code Online (Sandbox Code Playgroud)
或者这更好:
synchronized (bean) {
try {
// Write something
}
catch (InterruptedException e) {
// Write something
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪一个是最佳实践.显然考虑到我必须同步try块中的所有代码.我不是在谈论我只能在try中同步部分代码的情况(在这种情况下,我认为在try中包含synch块会更好).我的疑问是关于我要同步所有try块的情况.
Gra*_*ray 13
最好在try块内部使用synchronized块或在synchronized块内部使用try块?
除非你明确需要catch
在synchronized
块中,否则我会使synchronized
代码段尽可能小,并将它放在try/catch中.所以第一种模式会更好.然后,如果您确实需要在该catch
部分中执行操作(例如记录异常或重新中断该线程,请参见下文),这些操作不会阻止其他线程.
也就是说,如果synchronized
块包含多行(当然通常不是一个好主意),那么我会考虑将try/catch块移动到更接近抛出异常的方法(prolly wait
或notify
).如果使用大量的行,则存在使用大型try/catch块不正确地处理异常的风险.在这里取决于参考框架.
另外,请确保至少记录中断的异常.永远不要忽视它们.您可能还想重新中断该线程:
try {
...
} catch (InterruptedException e) {
// always a good pattern
Thread.currentThread().interrupt();
// handle the interrupt here by logging or returning or ...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7089 次 |
最近记录: |