如何正确地让两个线程更新同一个Collection?

时间:2012-10-19 12:54:12

标签: java multithreading

我有一个程序,它需要2个来源的命令。 另一个是套接字接口,另一个是事件监听器。

设置监听器后,程序通过调用

等待命令
wait();

命令在到达时使用synchronized方法添加到Vector(附加到Vector的末尾),在添加命令后添加

notify();

当发生这种情况时,执行从wait()调用继续,并从第一个元素开始处理命令Vector的内容。为了测试功能,我在处理方法中添加了一个Thread.sleep(5000),因此处理至少需要5秒钟。

然后我从两个来源生成了命令。

事实证明,命令没有按照它们到达的顺序处理!即使来自套接字的命令首先到达,最先处理的事件最终也会被处理。

是什么导致这个?我的设计坏了吗?

2 个答案:

答案 0 :(得分:1)

对我来说,这听起来像你想使用BlockingQueue。让源代码向它添加命令,让处理程序按顺序执行它们。

答案 1 :(得分:1)

您提供BlockinQueue

  • 没有阻止,但可以控制对发件人,命令发布者的访问权限
  • 消费者的等待点,安全弹出命令的能力