ホームページ >Java >&#&チュートリアル >Java コルーチン
Java コルーチンは、実行中のプロセスからプロセスへの切り替えがないマルチタスクのスタイルによって実行される特定のタスクを一般化するためのユニットとしてパッケージ化することで、コンピューターに送信される一連の命令として定義されます。他のプロセスを実行し、代わりに協調的なマルチタスクとして同時に実行します。これらの命令は、一時停止および再開を許可することによって実行されます。私たちは、コルーチン、協調タスク、イベント ループ、イテレータ、パイプなどを通じて記述されたプログラムのジャンルにはよく精通しています。しかし、コルーチンの概念は、サブルーチン、スレッド、ジェネレータなどの他の概念と比較して混乱するのが一般的です。 、相互再帰。
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
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( ) を使用すると、ユーザーは補完する追加機能を提供できます。コルーチンのもう 1 つの大きな特徴は、コルーチンが不変であり、定義されたステップのシーケンスを変更できないことです。
CoroutineWriter と CoroutineReader を使用すると、コルーチンをシリアル化または逆シリアル化できます。 Java の組み込みシリアル化関数がデフォルトで使用され、コルーチンの状態はそれを使用して作成されます。それとは別に、シリアル化または逆シリアル化をさらに制御するためのカスタム実装があり、XML、JSON などのさまざまなシリアル化形式、または XStream、Kryo、Jackson などのさまざまなシリアライザーを追加するために CoroutineWriter および CoroutineReader に渡されます。
シリアル化は高度な機能であり、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 中国語 Web サイトの他の関連記事を参照してください。