我想用Java做一些事情,如果使用并发例程编写会更清楚,但是对于哪些完全线程严重过度杀伤.当然,答案是使用协同程序,但标准Java库中似乎没有任何协程支持,而快速谷歌在这里或那里会带来诱人的提示,但没有什么实质性的.
这是我到目前为止所发现的:
yield只返回调用者的功能.正确的协同程序允许yields将控制权直接转移到任何已知的协程.基本上这个库,重量级和可怕的,只给你支持迭代器,而不是完全通用的协同程序.这就是我发现的一切.
我知道Da Vinci机器中对协同程序的本机JVM支持,我也知道这样做的JNI延续技巧.然而,对我来说这些并不是一个很好的解决方案,因为我不一定能控制我的代码运行在哪个VM或平台上.(事实上,任何字节码操作系统都会遇到类似的问题 - 如果可能的话,最好是纯Java.运行时字节码操作会限制我在Android上使用它.例如.)
那么有人有任何指针吗?这甚至可能吗?如果没有,是否可以在Java 7中使用?
编辑添加:
只是为了确保混乱载,这是一个相关的问题我的另外一个,但又不尽相同.这个是寻找现有的实施方案,以避免不必要地重新发明轮子.另一个是关于如何在Java中实现协同程序的问题,如果这个问题无法解决的话.目的是在不同的线程上保留不同的问题.
进一步编辑添加:
该答案被选中.然而,有些评论是有条理的.库指向的不是一个协程库,所以它在技术上不回答我的问题.尽管如此,它与上面链接的Google Code项目有两个优势:
您如何看待Matthias Mann撰写的这个延续库?我复制了创作者网站的优点和缺点,以方便讨论.重要的是要查看源代码中的测试,以查看网站上的一个示例.
http://www.matthiasmann.de/content/view/24/26/
让我们从你得到的东西开始:
有了所有这些强大的功能 - 你可能会要求它们的缺点.那么当然有一些缺点:
通过将需要使用同步的代码放入其自己的方法中,可以解决同步问题.
| 归档时间: |
|
| 查看次数: |
13543 次 |
| 最近记录: |