Java 如何正确地让两个线程更新同一个集合?

Java 如何正确地让两个线程更新同一个集合?,java,multithreading,Java,Multithreading,我有一个程序,它需要来自两个源的命令。 另一个是套接字接口,另一个是事件侦听器 设置侦听器后,程序通过调用以下命令等待命令: wait(); 当命令到达时,将使用同步方法将其添加到向量(追加到向量的末尾),在添加命令后,该方法将调用 notify(); 发生这种情况时,执行将从wait()调用继续,并从第一个元素开始处理命令向量的内容。为了测试功能,我在处理方法中添加了Thread.sleep(5000),这样处理至少需要5秒钟 然后我从这两个源生成了命令 事实证明,这些命令并没有按照它们到

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

设置侦听器后,程序通过调用以下命令等待命令:

wait();
当命令到达时,将使用同步方法将其添加到向量(追加到向量的末尾),在添加命令后,该方法将调用

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

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

事实证明,这些命令并没有按照它们到达的顺序进行处理!即使来自套接字的命令最先到达,作为事件到达的那些也会首先得到处理


这是什么原因造成的?我的设计有问题吗?

对我来说,这听起来像是你想要使用一个新的设计。让源代码向其添加命令,并让处理程序按顺序执行这些命令。

使用您提供的:

  • 无阻塞,但控制对发送方、命令发布方的访问
  • 消费者的等待点,安全弹出命令的能力

如果您发布了实际的代码,那么诊断起来会更容易(也更可靠)。