This problem is called EQ in distributed computing, and some systems try to solve it, but Java deserialization does not.
Imagine two different threads residing in two different Java virtual machines in two different processes. Two different readings should lead to two different objects, since there is no way to implement a stream implementation so that these bytes in this file correspond to this object already in memory, but in a different process.
The same problem exists when two threads are in the same virtual machine - mapping from byte to object in memory is not defined, because Java serialization does not assign a global unique address to the object, and even if that were the case, it would be impossible to provide uniqueness even within one watt without a global weak map of objects containing a key record for each serialized / deserialized object. Java serialization simply searches for the security of an object identifier between different deserialization sessions.
source share