Poo*_*ool 1 java concurrency multithreading java-memory-model
以下是ArrayList在多线程环境中同步工作的代码片段吗?
class MyList {
private final ArrayList<String> internalList = new ArrayList<String>();
void add(String newValue) {
synchronized (internalList) {
internalList.add(newValue);
}
}
boolean find(String match) {
synchronized (internalList) {
for (String value : internalList) {
if (value.equals(match)) {
return true;
}
}
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我担心一个线程无法通过另一个线程看到更改.
您的代码将起作用并且是线程安全的但不是并发的.你可能要考虑使用ConcurrentLinkedQueue或像其他并发线程安全的数据结构ConcurrentHashMap或CopyOnWriteArraySet通过notnoop建议和使用contains方法.
class MyList {
private final ConcurrentLinkedQueue<String> internalList =
new ConcurrentLinkedQueue<String>();
void add(String newValue) {
internalList.add(newValue);
}
boolean find(String match) {
return internalList.contains(match);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |