![](/img/trans.png)
[英]Is there a possiblity to write/read from a socket on same port from different class
[英]Is it possible to allow different thread both read to and write from the same collection?
我有以下包装:
public UserContianer{
private List<User> users;
public void add(User u){
users.add(u)
}
public void update(User u){
if(users.contains(u))
//updating with the new value u
}
public User get(int index){
return users.get(index);
}
}
我需要允许多个线程同时读取和写入容器,以便
如果列表的读写元素相同,则
如果已经有一个线程在更新元素,则所有读操作都应被阻止,直到写操作完成
如果有一个线程正在读取某些元素,则应阻止所有写入操作,直到读取完成
首先,这样的要求是否有意义? 我是多线程的新手,也许实际上不是我想要的。
其次,可以用Java实现这些要求吗?
一种选择是使用Collections.synchronizedList(List<T> list)
将您现有的List包装在一个同步版本中。 如果所有访问都是通过同步包装器进行的,则允许线程安全使用List。
请注意,列表中的元素是引用 。 如果要在更改对象时锁定列表,则需要在更高级别进行同步。 一种方法是将方法标记为已synchronized
。
public synchronized void update(User u) { ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.