如果使用并发例程编写的话,我想在Java中做一些更清晰的事情,但是对于这些线程来说,完全打开线程是非常过分的。当然,答案是协同线的使用,但是在标准的Java库中似乎没有任何协同支持,一个快速的Google会在这里或那里提供诱人的提示,但是没有什么实质性的东西。
到目前为止,我发现的是:
yield
特性,它只返回给调用者。适当的协同线允许yield
将控制直接转移到任何已知的协同线。基本上,这个库,重量级和可怕的,它只是给你支持迭代器,而不是完全-一般的协同。这就是我所发现的一切。
我知道在Da Vinci机器中原生JVM对协同器的支持,我也知道JNI延续技巧可以这样做。然而,对于我来说,这些并不是很好的解决方案,因为我不一定能够控制我的代码在哪个VM或平台上运行。(事实上,任何字节码操作系统都会遇到类似的问题--如果可能的话,最好使用纯Java。例如,运行时字节码操作将限制我不能在Android上使用它。)
有谁有指点吗?这有可能吗?如果没有,在Java 7中会有可能吗?
编辑后添加:
为了确保控制混乱,这是一个与我的另一个相关的问题,但不是相同的问题。这一个正在寻找一个现有的实现,以避免不必要地重新发明车轮。另一个问题是,如果这个问题无法回答的话,我们将如何在Java中实现协同机制。目的是在不同的线程上保留不同的问题。
经进一步编辑后添加:
答案被选中。然而,有些评论是有道理的。指出的图书馆不是一个协同库,所以它在技术上没有回答我的问题。不过,尽管如此,与上面链接的Google Code项目相比,它有两个优势:
发布于 2010-05-17 06:14:12
爪哇流是一个延续实现,它可能会允许您这样做。不过,它使用字节码操作。
不管怎样,这感觉就像你想用普通的C来做OOP,这是可行的,但这并不意味着你应该这么做。
发布于 2011-05-25 07:17:18
发布于 2011-01-14 00:58:21
你觉得这个由马蒂亚斯·曼写的续集库怎么样?为了便于讨论,我从创作者的网站上复制了正反两方面的内容。查看源代码中的测试以查看网站上的一个示例是非常重要的。
http://www.matthiasmann.de/content/view/24/26/
让我们从你得到的开始:
所有这些伟大的功能-你可能会要求的缺点。当然,也有一些缺点:
可以通过将需要使用同步的代码放入自己的方法来解决同步问题。
https://stackoverflow.com/questions/2846428
复制相似问题