Java 协程被定义为一组指令,通过将其打包为一个单元来发送到计算机,用于概括要通过多任务处理风格执行的特定任务,其中没有从正在运行的进程切换到正在运行的进程。其他进程,而是将其作为协作多任务同时运行。这些指令是通过允许它们暂停和恢复来执行的。我们非常熟悉通过协同例程、协作任务、事件循环、迭代器、管道等编写的程序类型。然而,人们通常会对协同例程的概念相对于子例程、线程、生成器等其他概念感到困惑。 ,相互递归。
广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
Java 协程的语法
下面给出的是提到的语法:
1。在 POM 中输入依赖项。
<dependency> <groupId> {package name goes here} </groupId> <artifactId> {artifact ID goes here} </artifactId> <version> {version number goes here} </version> </dependency>
2。声明协程的类实例。
public static final class < Class name goes here > implements Coroutine
3。重写父类的实现。
@Override
4。通过 com.offbynull.coroutines 声明协程。
CoroutineRunnerr = new CoroutineRunner(new <class name> ());
在了解 Java 中的协程之前,让我们先看看实现相同内容的不同方法,因为不同的方法将决定纯 Java 中协程的工作方式。事实上,Java 的抽象施加了一些限制,但实现并没有停止实现。
被广泛接受的,有 4 种方法负责协程的实现。
协程是轻量级线程,它们通过共享现有线程而不是拥有专用的系统线程来运行。这种协作方式通过共享来运行,并确保共享线程不会被占用过多。 Java 7 中的 ForkJoinTask 和 Java 8 中的 CompletableFuture 提供了有关共享线程执行的显式支持。现在,如果协程暂停不确定的时间,则不会使用任何计算资源,并且只有在等待的资源可用时才能恢复执行。
我们的第一个任务是声明协程。缺乏一种本地机制来声明任何包含暂停的对象;唯一的方法是通过 API 来实现它。它可以被声明为协程类的实例,并且 esoco GmBH 提供了 Coroutine.first( ) 方法来调用新的协程实例。或者,可以调用构造函数实例来执行相同的任务。使用 Coroutine.then( ) 用户可以提供额外的功能进行补充。协程的另一个主要特征是它们是不可变的,并且定义的步骤顺序无法更改。
使用CoroutineWriter和CoroutineReader,可以对协程进行序列化或反序列化。默认情况下使用 Java 内置的序列化函数,并且协程的状态是使用该函数构成的。除此之外,还有自定义实现来进一步控制序列化或反序列化,并传递给 CoroutineWriter 和 CoroutineReader 以添加不同的序列化格式(如 XML、JSON)或不同的序列化程序(如 XStream、Kryo、Jackson 等)
序列化是一项高级功能,强烈建议熟悉 JVM 字节代码。序列化的概念允许将协程转换为字节数组并从字节数组转换回来。
序列化的典型用例是:
Another derivative of serialization is the versioning which enables developers to change the logic of coroutine along side still being able to load data using serialization from earlier versions.
Given below are the examples of Java Coroutines:
A “Hello World” type example coroutines.
Syntax:
public static final class CoroutineDemo implements Coroutine { @Override public void run(Continuation c) { System.out.println("Start of Main stream "); for (int i = 0; i < 10; i++) { echo(c, i); } } private void echo(Continuation c, int x) { System.out.println(x); c.suspend(); } } CoroutineRunner runnerVar = new CoroutineRunner(new CoroutineDemo()); runnerVar.execute(); runnerVar.execute(); runnerVar.execute(); runnerVar.execute();
Output:
Forking of an object.
Syntax:
public final class CoroutineDemo implements Coroutine { @Override public void run(Continuation c) { System.out.println("Start of Main stream"); for (int i = 0; i < 10; i++) { echo(c, i); } } private void echo(Continuation c, int x) { System.out.println(x); c.suspend(); } } CoroutineRunner runner1 = new CoroutineRunner(new CoroutineDemo()); runner1.execute(); byte[] dumped = new CoroutineWriter().write(runner1); CoroutineRunner runner2 = new CoroutineReader().read(dumped); runner1.execute(); runner2.execute(); runner1.execute(); runner2.execute(); runner1.execute(); runner2.execute();
Output:
Through this article, we have looked at the working of Java coroutines. First, one needs to make sure that the POM and details of the maven build are properly instantiated and the build is done. With the different use case of a simple one and the forking, we are able to understand how 2 variables carry the information and if something gets updated in the root, the same thing is reflected back into the fork as well through serialization.
以上是Java 协程的详细内容。更多信息请关注PHP中文网其他相关文章!