Java多线程和链表操作

时间:2013-10-30 13:23:25

标签: java multithreading thread-safety

我运行一个java服务器来支持我正在开发的Android游戏。服务器接收客户端套接字,打开一个新线程,读取从客户端发送的对象,并在链表上执行操作。

操作包括,如果列表为空,则将新对象添加到链接列表。 如果列表不为空,则线程将对象添加到列表中并返回列表中的其他对象。

if (!check.getName().equals(fighter1.getName())) {
  fighter2 = check;
  itr.remove();
  OutputStream os = clientSocket.getOutputStream();
  ObjectOutputStream oos = new ObjectOutputStream(os);
  oos.writeObject(fighter2);        
  oos.flush();
  checkName = false;
}

这是线程的删除部分,添加部分之前有一点点,基本上只是list.add(object);

现在,问题是因为这个服务器可以运行多个线程,如果10个用户同时连接会发生什么,这不会很有可能导致列表有空指针/其他错误。

我想扩展这台服务器,以便能够同时处理数百个连接,而我目前只是使用少数alpha测试人员对其进行测试。 关于如何尽可能安全地改变数据,我有什么好主意吗?

2 个答案:

答案 0 :(得分:1)

我认为你应该只使用一个线程安全的List,比如CopyOnWriteArrayList,只要速度不重要。 (这是一种肮脏但简单的方式;))

答案 1 :(得分:0)

链接列表不是线程安全的,您可以尝试其他线程安全集合,如ConcurrentLinkedQueue