如果队列已满,ArrayBlockingQueue 将阻塞生产者线程,如果队列为空,它将阻塞消费者线程。
这种阻塞的概念不是与多线程的想法背道而驰吗?如果我有一个“主”线程,让我们说我想将所有“记录”活动委托给另一个线程。所以基本上在我的主线程中,我创建了一个 Runnable 来记录输出,并将 Runnable 放在一个 ArrayBlockingQueue 上。这样做的全部目的是让“主”线程立即返回,而不会在昂贵的日志记录操作中浪费任何时间。
但是如果队列已满,主线程将被阻塞并等待直到有可用的位置。那么它对我们有什么帮助呢?