Vic*_*tor 5 java multithreading blockingqueue
如果队列已满,ArrayBlockingQueue将阻塞生产者线程,如果队列为空,它将阻塞使用者线程.
这种阻塞的概念是否违背了多线程的想法?如果我有一个'主'线程,让我们说我想将所有'Logging'活动委托给另一个线程.所以基本上在我的主线程中,我创建一个Runnable来记录输出,并将Runnable放在ArrayBlockingQueue上.这样做的全部目的是让'main'线程立即返回,而不会在昂贵的日志操作中浪费任何时间.
但是如果队列已满,主线程将被阻塞,并将等待一个点可用.那它对我们有什么帮助?
该队列不会出现异议,它会阻止向系统引入额外的质量.在这种情况下,它是预防饥饿.
想象一组线程,其中一个线程非常快速地生成工作单元.如果允许队列无限制增长,那么"快速生产者"队列可能会占用所有生产能力.有时,预防这种副作用比使所有线程解除阻塞更重要.
我认为这是设计师的决定.如果他选择了阻塞模式,ArrayBlockingQueue会为它提供put方法.如果desiner不想要阻塞模式,则ArrayBlockingQueue具有offer在队列已满时将返回false的方法,但是他需要决定如何处理重新记录的日志记录事件.