Kon*_*che 17 java concurrency multithreading
自从我写一个分析器注重并发方面,我要寻找使用好的人造例如同步机制中的Java.我的探查器可以看到与线程相关的一些操作; 例如:
所以我正在寻找的是一个Java程序,乍一看似乎是理解的,但在执行它时,你开始怀疑结果.我希望我的探查器可能能够检测到后台发生了什么.
为了澄清自己,我举一个例子,Brian Goetz撰写的Java Concurrency in Practice一书给出了"有毒"代码示例,这些示例用于学习原因.
@NotThreadSafe
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是通过该方法的线程安全类的扩展putIfAbsent
.由于list
是同步的,但putIfAbsent
使用另一个锁来保护状态,就像列表中定义的方法一样.
分析器可以显示使用过的监视器锁和用户的惊讶(或者不是......),用户会看到有两个可能的监视器锁而不是一个.
我不太喜欢这个例子,但我不会问,如果我已经有很多好的例子了.
我发现我的问题类似于:你在Java中遇到的最常见的并发问题是什么?和Java并发错误模式.
但他们只提到破坏的并发程序.我也在寻找线程安全的实现,但仍然不明显它们是线程安全的.
归档时间: |
|
查看次数: |
2013 次 |
最近记录: |