如何在Ruby中将块传递给屈服线程

时间:2018-02-27 23:00:56

标签: ruby multithreading yield

我试图用Ruby包围Threads和Yielding,我有一个关于如何将块传递给屈服线程的问题。

具体来说,我有一个正在睡觉的线程,等待被告知要做某事,我希望线程执行一个不同的块,如果被告知(即,它正在睡觉,如果用户按下按钮) ,做一些除了睡觉的事情。)

说我有这样的代码:

    public List<Store> getAllStores() {
    return Stream.of(additionalYardList(), storesApi.getStores()).flatMap(List::stream).collect(Collectors.toList());
}

有可能吗?

我尝试使用@@ thread1.send(),但是send正在寻找方法名称。

感谢您花时间看看这个!

1 个答案:

答案 0 :(得分:1)

这是一个简单的工作线程:

queue = Queue.new

worker = Thread.new do
  # Fetch an item from the work queue, or wait until one is available
  while (work = queue.pop)
    # ... Do something with work
  end
end

queue.push(thing: 'to do')

pop方法将阻塞,直到某些内容被推入队列。

当你完成后,你可以推进一个故意空洞的工作:

queue.push(nil)

这将使工作线程退出。

您可以随时扩展该功能以执行更多操作,或处理更多条件。