Java 生产者消费者:从同一生产者接收n条连续消息的缓冲区

Java 生产者消费者:从同一生产者接收n条连续消息的缓冲区,java,multithreading,producer-consumer,Java,Multithreading,Producer Consumer,因此,我的生产者向缓冲区发送n条连续消息,然后发送一条结束消息(请注意,我无法修改Producer.java,并且此代码部分未同步): 坏例子: received Msg1 from Thread1 received Msg2 from Thread1 etc. received Msg6 from Thread1 received Msg1 from Thread2

因此,我的生产者向缓冲区发送n条连续消息,然后发送一条结束消息(请注意,我无法修改Producer.java,并且此代码部分未同步):

坏例子:

 received Msg1 from Thread1
               received Msg2 from Thread1
               etc. 
               received Msg6 from Thread1

               received Msg1 from Thread2
               received Msg2 from Thread2

               received Msg7 from Thread1
               etc.

如何同步Buffer.java中的代码以使消息有序?显然,我需要利用结束消息在线程完成发送后允许其他线程,但从这里开始,所有线程都是问号。

我认为您可以将消息放入,比如,
LinkedHashMap
,这样可以保证您的顺序。关于线程,您可以实现一些
wait()
/
notify()
逻辑,比如当您收到
end
消息时,
notify()
其他线程无法写入线程的类中。就是这样。我只允许修改缓冲区的类。
received Msg1 from Thread1
           received Msg2 from Thread1
           etc.
           received MsgN from Thread1
           received end  from Thread1

           received Msg1 from Thread2 
           received Msg2 from Thread2
           etc.
           received MsgN from Thread2
           received end  from Thread2
 received Msg1 from Thread1
               received Msg2 from Thread1
               etc. 
               received Msg6 from Thread1

               received Msg1 from Thread2
               received Msg2 from Thread2

               received Msg7 from Thread1
               etc.