2

我运行一个 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 测试人员对其进行测试。关于如何使数据更改尽可能安全有什么好主意吗?

4

2 回答 2

1

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

于 2013-10-30T13:37:48.130 回答
0

链表不是线程安全的,你可以试试其他线程安全的集合,比如ConcurrentLinkedQueue

于 2013-10-30T13:26:33.750 回答