首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java阻塞队列线程集控制的实现方法

Java阻塞队列线程集控制的实现方法 队列以一种先进先出的方式管理数据。如果你试图向一个已经满了的阻塞队列中添加一个元素,或是从一个空的阻塞队列中移除一个元素,将导致线程阻塞。在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期的把中间结果存到阻塞队列中。而其他工作者线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行的比第二个慢,则第二个线程集在等待结果时就会阻塞。如果第一个线程集运行的快,那么它将等待第二个线程集赶上来。 下面的程序展示了如何使用阻塞队列来控制线程集。

08
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用Java如何设计一个阻塞队列,然后说说ArrayBlockingQueue和LinkedBlockingQueue

    用Java如何设计一个阻塞队列,这个问题是在面滴滴的时候被问到的。当时确实没回答好,只是说了用个List,然后消费者再用个死循环一直去监控list的是否有值,有值的话就处理List里面的内容。回头想想,自己真是一个大傻X,也只有我才会这么设计一个阻塞队列(再说,我这也不是阻塞的队列)。 结果自己面试完之后,也没去总结这部分知识,然后过了一段时间,某教育机构的面试又被问到类似的问题了,只不过是换了一个形式,“请用wait方法和notify方法实现一套有生产者和消费者的这种逻辑”。然后我就又蒙圈了,追悔莫及,为啥我没有去了解一下这部分知识,所以这次我准备好好总结一下这部分内容。

    01

    面试系列之-线程池知识(JAVA基础)

    线程池由两个核心数据结构组成: 1)线程集合(workers):存放执行任务的线程,是一个HashSet; 2)任务等待队列(workQueue):存放等待线程池调度执行的任务,是一个阻塞式队列BlockingQueue; 关闭线程池时有两个关键步骤: 1)修改线程池状态到SHUTDOWN,这时新提交到线程池的任务都会被直接拒绝; 2)中断线程池中的所有线程,中断任务执行回收线程集合中所有线程。 线程池有如下状态: ●RUNNING:接收新任务,处理队列任务。 ●SHUTDOWN:不接收新任务,但处理队列任务。 ●STOP:不接收新任务,也不处理队列任务,并且中断所有处理中的任务。 ●TIDYING:所有任务都被终结,有效线程为0。会触发terminated()方法。 ●TERMINATED:当terminated()方法执行结束 线程池的状态转换规则: (1)线程池创建之后状态为RUNNING。 (2)执行线程池的shutdown()实例方法,会使线程池状态从RUNNING转变为SHUTDOWN (3)执行线程池的shutdownNow()实例方法,会使线程池状态从RUNNING转变为STOP(4)当线程池处于SHUTDOWN状态时,执行其shutdownNow()方法会将其状态转变为STOP(5)等待线程池的所有工作线程停止工作队列清空之后,线程池状态会从STOP转变为TIDYIN(6)执行完terminated()钩子方法之后,线程池状态从TIDYING转变为TERMINATED。

    01
    领券