首页 > Java > java教程 > 正文

Java 协程

王林
发布: 2024-08-30 15:58:11
原创
887 人浏览过

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 中协程的工作方式。事实上,Java 的抽象施加了一些限制,但实现并没有停止实现。

被广泛接受的,有 4 种方法负责协程的实现。

  • 为了原生支持协程,修改了 JVM,并对其进行了修补以关心协程的实现。达芬奇机器项目就是此类修改后的 JVM 之一。
  • 通过重写常规字节码,还可以实现协程功能。这些例程可以在运行时或在编译时处理。目前存在多种实现方式。来自 offbynull、Google 代码存档和/或 Apache commons。
  • 还可以通过特定于平台的机制实现 Java 本机接口,并在 OS 或 C 库中实现,并帮助提供 JVM 功能。
  • 最后但并非最不重要的一点是,协程也可以使用线程来实现,尽管性能很大程度上取决于 JVM 的线程实现。

协程是轻量级线程,它们通过共享现有线程而不是拥有专用的系统线程来运行。这种协作方式通过共享来运行,并确保共享线程不会被占用过多。 Java 7 中的 ForkJoinTask 和 Java 8 中的 CompletableFuture 提供了有关共享线程执行的显式支持。现在,如果协程暂停不确定的时间,则不会使用任何计算资源,并且只有在等待的资源可用时才能恢复执行。

我们的第一个任务是声明协程。缺乏一种本地机制来声明任何包含暂停的对象;唯一的方法是通过 API 来实现它。它可以被声明为协程类的实例,并且 esoco GmBH 提供了 Coroutine.first( ) 方法来调用新的协程实例。或者,可以调用构造函数实例来执行相同的任务。使用 Coroutine.then( ) 用户可以提供额外的功能进行补充。协程的另一个主要特征是它们是不可变的,并且定义的步骤顺序无法更改。

使用CoroutineWriter和CoroutineReader,可以对协程进行序列化或反序列化。默认情况下使用 Java 内置的序列化函数,并且协程的状态是使用该函数构成的。除此之外,还有自定义实现来进一步控制序列化或反序列化,并传递给 CoroutineWriter 和 CoroutineReader 以添加不同的序列化格式(如 XML、JSON)或不同的序列化程序(如 XStream、Kryo、Jackson 等)

序列化是一项高级功能,强烈建议熟悉 JVM 字节代码。序列化的概念允许将协程转换为字节数组并从字节数组转换回来。

序列化的典型用例是:

  • Using serialization, one can cache or checkpoint to a disk and write it back again.
  • Over the wire coroutine transmission.
  • Coroutine forking.

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.

Examples of Java Coroutines

Given below are the examples of Java Coroutines:

Example #1

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:

Java 协程

Example #2

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:

Java 协程

Conclusion

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中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!