Java ConcurrentModificationException ObjectOutputStream.writeObject()
在socket编程中,我试图向服务器发送一个对象,然后它抛出Java ConcurrentModificationException ObjectOutputStream.writeObject(),java,sockets,objectoutputstream,concurrentmodification,Java,Sockets,Objectoutputstream,Concurrentmodification,在socket编程中,我试图向服务器发送一个对象,然后它抛出ConcurrentModificationException。它并不是在每次迭代中都抛出异常。 我正在尝试在服务器上发送可序列化的对象 客户守则- Message request = new Message(); request.setMessage("request"); request.setSourceNode(node); System.out.println("cs enter
ConcurrentModificationException
。它并不是在每次迭代中都抛出异常。
我正在尝试在服务器上发送可序列化的对象
客户守则-
Message request = new Message();
request.setMessage("request");
request.setSourceNode(node);
System.out.println("cs enter "+ node.getId());
for(Integer i : clientThread.keySet())
{
//clientThread.get(i).sendMessage("request");
clientThread.get(i).sendMessage(request);
}
服务器上的代码-
public synchronized void sendMessage(Message send)
{
//System.out.println("Client request time stamp" + main.node.getRequestTimestamp());
send.setDestinationNode(destinationNode);
//System.out.println(send.getMessage() + " " + send.getSourceNode().getId() + " "+ send.getDestinationNode().getId());
try {
oos.writeObject(send);
oos.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
堆栈跟踪:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList.writeObject(ArrayList.java:766)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at Client.sendMessage(Client.java:45)
at Main.csEnter(Main.java:176)
at Main.main(Main.java:75)
为什么要使用序列化API发送它?为什么不改用JSON呢?请同时发布堆栈跟踪。一个可能的原因是您在遍历它时更改了客户端线程的数量。发送邮件时包括或删除客户端。我不会在初始化后修改客户端线程hashmap,并在每次发送消息时使用相同的hashmap。我的代码在前4次迭代中运行,之后它会抛出这个异常。是的,它也可能是从HashMap生成的。您可以尝试使用ConcurrentHashMap。为什么要使用序列化API发送它?为什么不改用JSON呢?请同时发布堆栈跟踪。一个可能的原因是您在遍历它时更改了客户端线程的数量。发送邮件时包括或删除客户端。我不会在初始化后修改客户端线程hashmap,并在每次发送消息时使用相同的hashmap。我的代码在前4次迭代中运行,之后它会抛出这个异常。是的,它也可能是从HashMap生成的。您可以尝试使用ConcurrentHashMap。