使用线程安全的集合类,我们的操作并不一定是安全的,
因为客户端的操作并不是原子的,所以通常的办法是在客户端调用时加锁。
例如,Vector,Stack,HashMap等等。
eg:
public class UserManager {
private List<String> userList = new ArrayList<String>();
//在并发环境下需要加锁
public /*synchronized*/ boolean addUser(String user){
boolean succeed = false;
synchronized (userList) {//加锁
if(!userList.contains(user)){
System.out.println(Thread.currentThread().getName() + "--->" +"我来了" + "--->" + user);
succeed = userList.add(user);
}
}
return succeed;
}
}