Java中的连续体

Java中的连续体,java,continuations,Java,Continuations,我正在寻找在Java中呈现延续性的最新作品。我在这里遇到过这个问题,但它可以追溯到一两年前 有一些工作,比如Apache(由于任何原因,我现在无法下载)。还有一个例子提到了JDK中的支持,但似乎支持范围将扩展到Java8。我还认为Scala版本中也引入了延续 我正在寻找用Java实现的延续概念。而且,我不是在寻找呈现连续传递风格(CSP)的作品 我会感谢你可能知道的任何其他工作 从您的帖子中不清楚为什么JavaFlow不能满足您的需求。是另一个库,我会先从一个Apache项目开始,然后再尝试像J

我正在寻找在Java中呈现延续性的最新作品。我在这里遇到过这个问题,但它可以追溯到一两年前

有一些工作,比如Apache(由于任何原因,我现在无法下载)。还有一个例子提到了JDK中的支持,但似乎支持范围将扩展到Java8。我还认为Scala版本中也引入了延续

我正在寻找用Java实现的延续概念。而且,我不是在寻找呈现连续传递风格(CSP)的作品


我会感谢你可能知道的任何其他工作

从您的帖子中不清楚为什么JavaFlow不能满足您的需求。是另一个库,我会先从一个Apache项目开始,然后再尝试像JYeild这样支持较少的项目

我们最近在kilim中添加了一流的续集,并且有一个2.0的预发行版

这是一个计算XorShift(num次)的截取值:

公共静态类X2扩展了循环{
长期结果;
public void execute()可暂停{
长x,y,s0=103,s1=17;
while(true){
x=s0;
y=s1;
s0=y;
x^=(x>17)^(y>26);
结果=(s1+y);
纤维产量();
}
}
公共长循环(long num){
长val=0;
对于(int ii=0;ii

还提供了一个更高级别的工具(称为任务),可以自动安排时间,例如,因为网络数据包到达或文件读取完成

下面的代码片段显示,Koltin中的协同程序实际上是轻量级线程。创建100000个普通线程很可能会导致一些严重错误,如OutOfMemoryError,但这段代码工作正常:

fun main(args: Array<String>) = runBlocking<Unit> {
    val jobs = List(100_000) { // create a lot of coroutines and list their jobs
        launch(CommonPool) {
            delay(1000L)
            print(".")
        }
    }
    jobs.forEach { it.join() } // wait for all jobs to complete
}
fun main(args:Array)=运行阻塞{
val jobs=List(100_000){//创建许多协同程序并列出它们的作业
启动(公共池){
延迟(1000L)
打印(“.”)
}
}
jobs.forEach{it.join()}//等待所有作业完成
}
当然,这里没有什么大的魔力,Kotlin只会在编译时为您生成一些代码,这些代码将在ForkJoinPool中执行所有100000个任务


文档中还有很多很酷的例子。

我编辑了这篇文章,现在清楚了吗?在Java中,通常有一种比使用共同例程或延续更好的方法来解决问题。这部分是因为Java不支持它。@PeterLawrey好吧,我可能不完全同意你的意见,因为他们正在为JDK 8规划这个编程特性。而且,在多核编程和暂停某些代码方面,似乎需要继续。如果我错了,请纠正我。延续可能很有用,可能会包含在Java8中。然而,我认为它们的主要优点是可以控制的轻量级线程。由于您有更多的内核,因此实际上更容易将硬件和线程用于解决问题。请在此处包含链接中答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接的答案可能无效
fun main(args: Array<String>) = runBlocking<Unit> {
    val jobs = List(100_000) { // create a lot of coroutines and list their jobs
        launch(CommonPool) {
            delay(1000L)
            print(".")
        }
    }
    jobs.forEach { it.join() } // wait for all jobs to complete
}