必须将对象序列和反序列,
而且尤其在多线程中要引用多个对象,而且多个对象之间有某种关联,
将多个对象融合进一个对象中,便于深度克隆,否则一旦牵扯关联获取某种数据。
就有可能访问不到某对象数据,
比如:序列多个对象中存在Map对象建立的链表,[color=red]Key值为对象[/color]的情况,如果不深度克隆,会造成死循环(一个对象被多个进程引用,注意:并非是锁定了,本质就是死循环)。
而如果这个时候每个对象都进行深度克隆,再加入多线程的run中运算,定会造成一个Map对象访问不到另一个Map对象中的值
而且尤其在多线程中要引用多个对象,而且多个对象之间有某种关联,
将多个对象融合进一个对象中,便于深度克隆,否则一旦牵扯关联获取某种数据。
就有可能访问不到某对象数据,
比如:序列多个对象中存在Map对象建立的链表,[color=red]Key值为对象[/color]的情况,如果不深度克隆,会造成死循环(一个对象被多个进程引用,注意:并非是锁定了,本质就是死循环)。
而如果这个时候每个对象都进行深度克隆,再加入多线程的run中运算,定会造成一个Map对象访问不到另一个Map对象中的值
public static final Object deepclone(Object src)
{
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(src);
out.close();
ByteArrayInputStream bin = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bin);
Object clone = in.readObject();
in.close();
return (clone);
}
catch (ClassNotFoundException e)
{
throw new InternalError(e.toString());
}
catch (StreamCorruptedException e)
{
throw new InternalError(e.toString());
}
catch (IOException e)
{
throw new InternalError(e.toString());
}
}