Java 将多线程执行的函数放入队列

Java 将多线程执行的函数放入队列,java,multithreading,queue,Java,Multithreading,Queue,我目前正在Java中创建一个库模拟器。此库有多个线程借用者。 每个借阅线程执行一系列功能,例如(创建借阅列表、从图书馆借阅图书、将图书归还图书馆)。在模型类中创建一个借贷者数组,每个线程在for循环中启动。我目前遇到一个问题,就是让借贷者运行的函数放在一种输出队列中,从而运行第一个借贷者输入的第一个函数等 我的问题是,是否有一种方法可以代替在每个借用线程到达时执行每个函数,将来自所有线程的函数放入一个输出队列中,它将处理该队列?我使用BlockingDeque(,先进先出)修复了一个类似的问题。

我目前正在Java中创建一个库模拟器。此库有多个线程借用者。 每个借阅线程执行一系列功能,例如(创建借阅列表、从图书馆借阅图书、将图书归还图书馆)。在模型类中创建一个借贷者数组,每个线程在for循环中启动。我目前遇到一个问题,就是让借贷者运行的函数放在一种输出队列中,从而运行第一个借贷者输入的第一个函数等


我的问题是,是否有一种方法可以代替在每个借用线程到达时执行每个函数,将来自所有线程的函数放入一个输出队列中,它将处理该队列?

我使用
BlockingDeque
(,先进先出)修复了一个类似的问题。 使用者线程从deque弹出第一个
任务
,并对其进行处理。完成后,他报告并承担下一个任务,以此类推。 其他线程——在您的情况下是借贷者——只需将任何任务放在最后一个位置


希望这有帮助

您可以看看Java的BlockingQueue实现(如ArrayBlockingQueue),它为生产者-消费者模式(如您所说的模式)提供了方便的收集实现。放入队列的对象可以是任何对象:数据对象、策略、lambda函数。。。问题是什么?我试图实现的是,与其让每个线程一个接一个地执行,不如让它们一个接一个地执行某个函数。一个例子是“向图书馆索要所需的一套书籍”。你是在问如何彻底摆脱“借阅者”的线索吗?如果我被要求实现一个高性能的、可扩展的、精简的、平均的库模拟器,我会这么做;但缺点是,我的代码比您描述的更难理解。使用线程,一次独立于另一个线程做一件事,是一种非常直观的建模方式,人们一次也只做一件事,而且通常是独立于另一件事。我的高性能库模拟器看起来像一个操作系统调度程序,带有有状态的“借用者”对象(有点像操作系统进程)和不同的队列(包括按时间顺序排列的睡眠队列),用于借款人可能必须等待的每一件事情。当我的借款人有时间做某事(即,提升其状态)时,我的计划程序会将其从任何队列中挑选出来,并将其添加到线程池的队列中(有点像操作系统的“运行队列”),池线程将调用适当的方法来更新借用者并将其放入下一个队列。)