Java 如何正确地让两个线程更新同一个集合?
我有一个程序,它需要来自两个源的命令。 另一个是套接字接口,另一个是事件侦听器 设置侦听器后,程序通过调用以下命令等待命令:Java 如何正确地让两个线程更新同一个集合?,java,multithreading,Java,Multithreading,我有一个程序,它需要来自两个源的命令。 另一个是套接字接口,另一个是事件侦听器 设置侦听器后,程序通过调用以下命令等待命令: wait(); 当命令到达时,将使用同步方法将其添加到向量(追加到向量的末尾),在添加命令后,该方法将调用 notify(); 发生这种情况时,执行将从wait()调用继续,并从第一个元素开始处理命令向量的内容。为了测试功能,我在处理方法中添加了Thread.sleep(5000),这样处理至少需要5秒钟 然后我从这两个源生成了命令 事实证明,这些命令并没有按照它们到
wait();
当命令到达时,将使用同步方法将其添加到向量(追加到向量的末尾),在添加命令后,该方法将调用
notify();
发生这种情况时,执行将从wait()调用继续,并从第一个元素开始处理命令向量的内容。为了测试功能,我在处理方法中添加了Thread.sleep(5000),这样处理至少需要5秒钟
然后我从这两个源生成了命令
事实证明,这些命令并没有按照它们到达的顺序进行处理!即使来自套接字的命令最先到达,作为事件到达的那些也会首先得到处理
这是什么原因造成的?我的设计有问题吗?对我来说,这听起来像是你想要使用一个新的设计。让源代码向其添加命令,并让处理程序按顺序执行这些命令。使用您提供的:
- 无阻塞,但控制对发送方、命令发布方的访问
- 消费者的等待点,安全弹出命令的能力