以下类别的线程安全是否会被打破; 我确信它不可能但只是想要倍加肯定,因为它不容易测试

Sco*_*ion 2 java concurrency multithreading hashset

public class ThreadSafe implements ITaskCompletionListener {

private final Set<String> taskIds = new HashSet<String>();
private final Set<String> successfulIds = new HashSet<String>();
private final Set<String> cancelledIds = new HashSet<String>();
private final Set<String> errorIds = new HashSet<String>();

public ThreadSafe() {

}

// invoked concurrently
@Override
public void onCancel(String pTaskId) {
    remove(pTaskId);
    cancelledIds.add(pTaskId);
}

// invoked concurrently
@Override
public void onError(String pTaskId) {
    remove(pTaskId);
    errorIds.add(pTaskId);
}

// invoked concurrently
@Override
public void onSuccess(String pTaskId) {
    remove(pTaskId);
    successfulIds.add(pTaskId);
}

private void remove(String pTaskId) {
    taskIds.remove(pTaskId);
}

}
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 8

来自HashSet文档:

请注意,此实现不同步.如果多个线程同时访问哈希集,并且至少有一个线程修改了该集,则必须在外部进行同步

所以不,你的代码不是线程安全的.同时访问任何方法可能会产生奇怪的结果.