Objective C转Java:NSOperationQueue?

3
我正在尝试理解Objective C代码,但我卡在这一行了。
代码:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];

我了解这行代码创建了一个NSOperationQueue类的新实例。但是,这个NSOperationQueue实例具体有什么作用呢?能否有人向我解释一下?由于我更熟悉Java,如果有人能够给我提供等效的Java代码片段,那将非常有帮助。

我不明白,你想做这个 NSOperationQueue queue = new NSOperationQueue(); 吗? - Buhake Sindi
1
实际上,我正在尝试理解NSOperationQueue在做什么以及Java中的等效函数是什么。据我所知,NSOperationQueue是在Objective C的库中定义的,或者类似于那样的东西。它不是我编写的函数或方法。 - Android-Droid
3个回答

11

NSOperationQueue 实现的基本功能与在 Java 中使用 ThreadPoolExecutorBlockingQueue 获得的基本相同。

也就是说,它接收一组 NSOperation(类似于 Java 中的 Runnables)并异步地执行它们。

额外的好处是操作队列会自动适应当前的运行时条件。


1
如何处理ThreadPoolExecutor中任务之间的依赖关系? - adib

4

Runnables无法配置彼此之间的依赖关系,这是NSOperation具有的重要特性。用户可能需要编写自定义代码(可以使用Future.get(),BlockingQueue.take())来实现相同的效果。


2
请看NSOperationQueue的文档。基本上,它是一个旨在执行多个NSOperation的类。这些操作与线程有些相似(它们由NSOperationQueue在后台线程中执行)。
如果需要更多细节,请参阅以下内容:简短教程完整文档

所以基本上这段代码定义了一个在后台运行的新线程? - Android-Droid
并不是定义了一个队列,而是定义了一个抽象的“操作”运行器,这些操作在后台线程中运行。队列仅仅是运行实际的操作,真正的工作是在这里完成的。 - Andrea Bergia
2
您还可以添加更复杂的行为,例如给操作添加依赖关系(必须在它们之前执行的其他操作)等等。 - 0x5f3759df
2
@Bombastic - 不一定是“线程”,操作队列可以并行地在分布在可用CPU核心上的多个线程上运行其操作,以优化当前的工作负载。 - PeyloW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接