【发布时间】:2013-06-04 01:18:31
【问题描述】:
在我的程序中,我有一个“发送者”和“接收者”线程,它们都作用于一个队列。
我在课堂上将队列定义为:
static Queue<my_class> queue = new LinkedList<my_class>();
但是,我认为我遇到了问题,因为我的 Queues 没有同步。在我的“接收者”线程中,有时我必须从队列中删除项目,这会影响“发送者”线程的运行方式。
我正在阅读有关BlockingQueues 的信息,想知道在我的情况下是否需要使用它?如果是这样,我该如何更改我的声明?我是否还需要在“Sender”和“Receiver”线程中声明BlockingQueue?
BlockingQueue 会确保在任何给定时间只有一个线程访问队列吗?
对不起,我对同步的概念很陌生,我觉得它很混乱..
感谢您的帮助。
【问题讨论】:
-
BlockingQueue是一个接口;如果您不需要Queue已经提供的任何其他方法(注意BlockingQueue扩展Queue),那么您可以使用线程安全版本初始化您的Queue,例如LinkedBlockingQueue。 -
" 在我的“接收者”线程中,有时我必须从队列中删除项目,这会影响“发送者”线程的运行方式。”
-
@fge 在我的“发件人”线程中,我根据队列中的第一项更新变量。因此,在“Receiver”线程从队列中删除值之后,“Sender”线程应该正确使用队列中的第一项来更新此变量。谢谢。
-
@Giri 那是什么变量?这个变量的值是否真的取决于任何时间点队列中的第一项?
标签: java multithreading synchronization queue