2015-12-26 42 views
1

我承认,如果可能的话,这将是敞开的门坏了,很糟糕的代码。但在某些特定情况下...在java中是否有一种setjmp/longjmp?

所以现在的问题是,是否有的setjmp/longjmp的任何等同?

我想在不使用线程的情况下实现一个类似python的生成器,只保存堆栈和上下文,然后再恢复。

+0

是的。该机制被称为*例外。* – fuz

+2

。例外可以使用这种机制,但例外主要是错误处理系统。 setjmp/longjmp还允许执行协同程序,除非可以证明,否则使用异常是不可能的。 –

+0

异常是稍微更结构化的长跳转。没有更多,没有更多。它们通常用于错误处理,但这不是必要的。 – fuz

回答

1

简单的回答:不,没有!你可以得到最接近的东西是标记为中断,这是一种向前跳转以突破多个嵌套块,但那就是它!

1

虽然不完全等同于C longjump,但来自apache commons的Javaflow库提供了一种方法来中断代码流(如异常,但捕获堆栈),并稍后重新启动。 这适用于实现协同程序。但是,它需要修改字节码。

http://commons.apache.org/sandbox/commons-javaflow/index.html

相关问题