如何在java中锁定向量,以便只有一个线程可以同时使用它?

时间:2012-11-25 10:04:03

标签: java multithreading swing

我有一个在多个线程之间共享的向量,当我尝试使用其中一个线程从这个向量读取时,我得到了一个StreamCorruptedException。

以下是异常的堆栈跟踪:

java.io.StreamCorruptedException: invalid stream header: 7371007E at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) at prj.ReadThread.run(ReadThread.java:32

在prj.ReadThread.run中出现此异常的代码行是

ObjectInputStream o = new ObjectInputStream(RS.getInputStream());

如果需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:2)

  

堆栈跟踪不是很有用吗?

readStreamHeader()中似乎抛出了异常,您可以在调试器中单步调试。我怀疑version number不匹配。许多类都包含警告:此类的序列化对象与将来的Xxx版本不兼容。

附录:@S Kh帮助报告以下内容:

  

问题是因为Java中的流。我是从服务器上的唯一流发送数据包(ObjectOutputStream),但是每次在客户端上通过new ObjectInputStream为每个数据包接收来自不同流的数据。所以我得到了这个例外。

答案 1 :(得分:1)

默认情况下,矢量是同步的。如果您在线程之间共享它们,请检查它们实现的同步策略是否足以使您的程序线程安全(因为某些同步的存在几乎不表示类的全面并发行为)