Java 队列同步

Java 队列同步,java,multithreading,synchronization,queue,Java,Multithreading,Synchronization,Queue,在我的程序中,我有一个“发送方”和“接收方”线程,它们都作用于一个队列 我已将类中的队列定义为: static Queue<my_class> queue = new LinkedList<my_class>(); static Queue Queue=new LinkedList(); 但是,我认为我遇到了一些问题,因为我的队列没有同步。在我的“接收者”线程中,我有时必须从队列中删除项目,这将影响“发送者”线程的操作方式 我在读有关阻塞队列的文章,想知道这是否是我在

在我的程序中,我有一个“发送方”和“接收方”线程,它们都作用于一个队列

我已将类中的队列定义为:

static Queue<my_class> queue = new LinkedList<my_class>();
static Queue Queue=new LinkedList();
但是,我认为我遇到了一些问题,因为我的
队列没有同步。在我的“接收者”线程中,我有时必须从队列中删除项目,这将影响“发送者”线程的操作方式

我在读有关阻塞队列的文章,想知道这是否是我在这种情况下需要使用的?如果是,我如何更改我的声明?我是否还需要在“发送方”和“接收方”线程中声明
阻塞队列

BlockingQueue
是否确保在任何给定时间只有一个线程访问队列

很抱歉,我对同步的概念很陌生,我觉得它很混乱


谢谢您的帮助。

您需要在接收器中声明一个
阻塞队列
,以便它可以使用
take
方法;发送方仍然可以使用
队列
声明及其
提供
方法,但如果要使用
提供(E,长超时,时间单位)
方法,则需要声明
阻止队列


大多数
BlockingQueue
实现实际上是无锁的,这意味着一个线程可以添加到其中,而另一个线程可以同时从中获取(无锁实现通常比使用锁的实现更具可扩展性)。无论采用何种实现方式,BlockingQueue都是线程安全的。

主要优点是BlockingQueue提供了正确的线程安全实现。此运行时实现由并发专家开发、审查和维护


阻塞队列是一个队列,当您尝试从队列中退出且队列为空时,或者当您尝试将项目排入队列且队列已满时,该队列将阻塞。试图从空队列中出列的线程将被阻止,直到其他线程将项目插入队列。试图将一个项目排入完整队列的线程被阻止,直到其他线程在队列中腾出空间,方法是将一个或多个项目退出队列或完全清除队列。

请阅读。
BlockingQueue
是一个接口;如果您不需要
队列
已经提供的方法以外的任何其他方法(请注意
阻塞队列
扩展了
队列
),那么您可以使用线程安全版本初始化
队列
,例如我的“接收器”中的
链接锁定队列
“thread,有时我必须从队列中删除项目,这将影响“Sender”线程的操作。”@fge在我的“Sender”线程中,我根据队列中的第一个项目更新了一个变量。“Receiver”线程从队列中删除值后,“Sender”线程“线程应正确使用队列中的第一项来更新此变量。谢谢。@Giri那是什么变量?该变量的值实际上是否取决于队列中任何时间点的第一个项目?