【发布时间】:2012-09-03 04:41:02
【问题描述】:
当我们谈论构建一个线程安全的类时,我并不太明白“委托”的概念。这是什么意思?该策略如何有效地创建一个线程安全的类?什么时候会失败?有人可以举个例子吗?
【问题讨论】:
标签: java multithreading concurrency thread-safety composition
当我们谈论构建一个线程安全的类时,我并不太明白“委托”的概念。这是什么意思?该策略如何有效地创建一个线程安全的类?什么时候会失败?有人可以举个例子吗?
【问题讨论】:
标签: java multithreading concurrency thread-safety composition
关于使类线程安全的“委托”意味着该类包含某个其他类对象的引用,该类将线程安全操作卸载到该类对象。考虑一下,
class Delegator {
private final AtomicInteger counter = new AtomicInteger(0);
public int getNextCounter(){
return counter.incrementAndGet();
}
}
这里Delegator 类已将线程安全委托给它的组件counter。显然,班级本可以自己进行 counter 操作,但那将是重新发明轮子。
需要谨慎使用委托。如果存在涉及多个变量的状态操作,那么这些变量操作中的每一个单独线程安全是不够的,但是状态转换一起也应该是线程安全的。
【讨论】: