我试图用Ruby包围Threads和Yielding,我有一个关于如何将块传递给屈服线程的问题。
具体来说,我有一个正在睡觉的线程,等待被告知要做某事,我希望线程执行一个不同的块,如果被告知(即,它正在睡觉,如果用户按下按钮) ,做一些除了睡觉的事情。)
说我有这样的代码:
public List<Store> getAllStores() {
return Stream.of(additionalYardList(), storesApi.getStores()).flatMap(List::stream).collect(Collectors.toList());
}
有可能吗?
我尝试使用@@ thread1.send(),但是send正在寻找方法名称。
感谢您花时间看看这个!
答案 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)
这将使工作线程退出。
您可以随时扩展该功能以执行更多操作,或处理更多条件。