我想在Java中做一些事情,如果使用并发例程编写,这些事情会更清楚,但是对于那些全功能线程来说,这是严重的过度杀伤力。答案当然是协程的使用,但是标准Java库中似乎没有协程支持,Google对其进行了快速介绍,在这里或那里带来了诱人的提示,但没有实质性提示。
到目前为止,这是我发现的内容:
yield
仅会返回给调用者的功能。适当的协程可以yield
将控制权直接转移到任何已知的协程。基本上,这个库虽然重量级且令人恐惧,但它只为您提供对迭代器的支持,而不是完全通用的协程。这就是我所发现的全部。
我知道达芬奇机器中对协程的本机JVM支持,并且我也知道执行此操作的JNI延续技巧。但是,对于我来说,这些并不是真正好的解决方案,因为我不必控制我的代码将在哪个VM或平台上运行。(实际上,任何字节码操作系统都会遇到类似的问题,例如,最好是使用纯Java。运行时字节码操作会限制我在Android上使用它。)
那么有人有指针吗?这有可能吗?如果没有,在Java 7中有可能吗?
编辑添加:
只是为了确保避免混淆,这是 与_我的另一个 _相关的 问题,但并非相同。为了避免不必要地重新发明轮子,该人正在寻找一种
现有的 实现方式。另一个问题是一个问题,如果该问题无法解决,将如何在Java中实现协程。目的是在不同的线程上保留不同的问题。
进一步编辑以添加:
该答案被选中。但是,需要进行一些评论。所指向的库不是协程库,因此从技术上讲它不能回答我的问题。话虽这么说,但是与上面链接的Google
Code项目相比,它有两个优势:
Javaflow是一个延续实现,它可能会让您这样做。它使用字节码操作。
无论如何,感觉就像您正在尝试使用纯C进行OOP。这是可行的,但这并不意味着您应该这样做。
问题内容: 这个问题与我有关Java中现有协程实现的问题有关。如我所怀疑的,如果事实证明Java中尚没有完整的协程实现,那么实现这些协程将需要什么? 正如我在该问题中所说的,我了解以下内容: 您可以将“协程”实现为后台的线程/线程池。 您可以在后台使用JVM字节码来完成棘手的事情,以使协程成为可能。 所谓的“达芬奇机” JVM实现具有使协程在无需字节码操作的情况下就可以实现的原语。 也有多种基于J
最近,我通过学习CodeLabs教程学习了kotlin coroutine。经过一些实践,我想知道我是否可以用java编写相同的代码。首先,我在MyKotlinFragment中编写了一个简单的kotlin代码。kt文件如下: 在我的片段中调用了;它起作用了。 接下来,我打开了一个名为MyRoutineFragment的java文件。java在同一个项目中,但我无法让它工作。 我无法将第一个文件转
我一直很难理解协同程序的错误处理,我已经通过以下步骤将其缩小到这个单元测试: > 以下是测试: 下面是测试的输出: > 为什么会这样? 我的理解是,您可以正常处理异常,并通过协同程序从中恢复 我应该如何处理例外情况? 我需要创建一个新的合作项目吗 如果我想继续使用同一个coroutineScope,我就不能抛出异常吗 我应该返回
与子程序(或者说函数)一样,协程(coroutine)也是一种程序组件。Donald Knuth 曾说,子程序是协程的特例。 一个子程序就是一次函数调用,它只有一个入口,一次返回,调用顺序是明确的。但协程的调用和子程序则大不一样,协程允许有多个入口对程序进行中断、继续执行等操作。 Python2 可以通过 yield 来实现基本的协程,但不够强大,第三方库 gevent 对协程提供了强大的支持。另
本文向大家介绍unity3d 可以作为协程的MonoBehaviour方法,包括了unity3d 可以作为协程的MonoBehaviour方法的使用技巧和注意事项,需要的朋友参考一下 示例 可以将三种MonoBehaviour方法制成协程。 Start() OnBecameVisible() OnLevelWasLoaded() 例如,这可用于创建仅在摄像机可见对象时执行的脚本。
Tornado 中推荐用 协程 来编写异步代码. 协程使用 Python 中的关键字 yield 来替代链式回调来实现挂起和继续程序的执行(像在 gevent 中使用的轻量级线程合作的方法有时也称作协程, 但是在 Tornado 中所有协程使用异步函数来实现的明确的上下文切换). 协程和异步编程的代码一样简单, 而且不用浪费额外的线程, . 它们还可以减少上下文切换 让并发更简单 . Exampl