Bug in serialization of ArrayBlockingQueue
这个错误好久以来都没有发现,直到最近才发现,大概的现象就是程序运行的时候使用ArrayBlockingQueue作为一个缓冲队列,而当程序需要重启的时候,需要先讲缓冲队列序列化,保存到文件中,才可以exit。而在java version "1.5.0_04"中(包括以前),ArrayBlockingQueue的序列化有问题。
ArrayBlockingQueue是使用一个数组,两个游标,再加上一些锁实现的。使用数组来保存数据,使用两个游标来保存进队和出队的地址,使用锁来保证线程安全。但是在jdk的早期版本中,游标被声明为transient,所以在序列化的时候,游标没有被序列化,当对象被重新读出来的时候,两个游标都被重置,于是,错误就产生了。
这个错误已经在一年前被sun修复,:)。