MCS*_*MCS 11 java concurrency session locking thread-safety
我有一些获取和设置会话属性的java代码:
Object obj = session.getAttribute(TEST_ATTR);
if (obj==null) {
obj = new MyObject();
session.setAttribute(obj);
}
Run Code Online (Sandbox Code Playgroud)
为了使这段代码成为线程安全的,我想将它包装在一个synchronized块中.但是我用什么作为锁定对象呢?使用会话是否有意义?
synchronized (session) {
Object obj = session.getAttribute(TEST_ATTR);
if (obj==null) {
obj = new MyObject();
session.setAttribute(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
使用您无法控制的锁通常会让人皱眉。锁的范围应尽可能紧密,并且由于会话或多或少是全局对象,因此不适合使用。尝试使用与java.util.concurrent.locks包不同的锁,并将其范围限定到您的类。
| 归档时间: |
|
| 查看次数: |
5369 次 |
| 最近记录: |