0 0

请教java concurrency in practice 读书困惑-list同步问题5

public class ListHelper<E> {
public List<E> list =
Collections.synchronizedList(new ArrayList<E>());
...
public synchronized boolean putIfAbsent(E x) {
boolean absent = !list.contains(x);
if (absent)
list.add(x);
return absent;
}
}

synchronized 对于list锁定不管用,每个线程使用的lock都并不一样,这是为么,ListHelper的内置锁不好使。。请教高手这个同步问题出在哪里

问题补充:
greenmartian 写道
说点题外的,个人觉得那本书研究一下可以,但是如果你真的需要用到复杂的并发编程,最好还是不要用java了,程序太深奥复杂,即使你完全写正确,能维护的人也不多,最好换个思路,研究一下用erlang等其它方式,或者改为非并发程序。

其实我对java并发不求复杂,但是一些基本的还是得弄明白才好写出比较正确的代码,无奈还是理解不了作者的表述,看来还是英语太差了。。

问题补充:
greenmartian 写道
你贴一下完整的测试程序看看,难道会有多个线程同时进入putIfAbsent方法内吗?

这个就是书上的示例代码,书上说不是线程安全的 我没能够理解
2012年5月17日 17:48

3个答案 按时间排序 按投票排序

0 0

那本书不错,但是翻译的比较烂,有的地方理解不了是因为翻译的不对。

2012年5月21日 11:16
0 0

你贴一下完整的测试程序看看,难道会有多个线程同时进入putIfAbsent方法内吗?

2012年5月21日 11:14
0 0

说点题外的,个人觉得那本书研究一下可以,但是如果你真的需要用到复杂的并发编程,最好还是不要用java了,程序太深奥复杂,即使你完全写正确,能维护的人也不多,最好换个思路,研究一下用erlang等其它方式,或者改为非并发程序。

2012年5月18日 10:11

相关推荐

Global site tag (gtag.js) - Google Analytics