如果队列已满,ArrayBlockingQueue将阻塞生产者线程,并且如果队列为空,它将阻塞使用者线程。阻塞队列是否失败了多线程的目的
这种阻塞的概念是否违背了多线程的思想?如果我有一个“主”线程,并让我们说我想将所有“日志记录”活动委托给另一个线程。所以基本上在我的主线程中,我创建了一个Runnable来记录输出,并将Runnable放在ArrayBlockingQueue上。这样做的全部目的是让'主'线程立即返回,而不会在昂贵的日志记录操作中浪费任何时间。
但是,如果队列已满,则主线程将被阻塞,并将等待一个点可用。那它对我们有什么帮助?
线程争用,线程匮乏和不安全的并发访问都是多线程时必须解决的所有问题。线程对共享资源不会很好,除非明确告诉。 – Makoto
你只考虑队列已满的情况。在其他情况下,线程不会阻塞。 –
@Makoto你在做什么?这与这个问题无关。顺便说一句,BlockingQueues的线程安全...请参阅http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html –