Java 非同期コールバック メカニズム
1. コールバックとは何ですか?呼び出し元と呼び出し先の間でコールバックが行われる前に、まず呼び出しが必要です。 Baidu Encyclopedia では次のようになります。
ソフトウェア モジュール間には、メソッドの呼び出しに関して、同期呼び出し、コールバック、非同期呼び出しの 3 つのカテゴリに分けられます。
コールバックは特別な種類の呼び出しであり、3 つのメソッドは少し異なります。
1. 同期コールバック、つまり、一方向のブロッキング。
2. コールバック、つまり双方向 (自転車の 2 つのギアに似ています)。
3. 非同期呼び出し、つまり、非同期メッセージによる通知。
2. CS での非同期コールバック (Java の場合)
たとえば、これはシミュレートされたシナリオです: クライアントはサーバーにメッセージを送信し、サーバーがそれを処理した後 (5 秒)、クライアントにコールバックして通知します。処理が成功したことをクライアントに通知します。コードは次のとおりです。
コールバック インターフェイス クラス:
public interface CSCallBack { public void process(String status); }
シミュレートされたクライアント:
public class Client implements CSCallBack { private Server server; public Client(Server server) { this.server = server; } public void sendMsg(final String msg){ System.out.println("客户端:发送的消息为:" + msg); new Thread(new Runnable() { @Override public void run() { server.getClientMsg(Client.this,msg); } }).start(); System.out.println("客户端:异步发送成功"); } @Override public void process(String status) { System.out.println("客户端:服务端回调状态为:" + status); } }
シミュレートされたサーバー:
public class Server { public void getClientMsg(CSCallBack csCallBack , String msg) { System.out.println("服务端:服务端接收到客户端发送的消息为:" + msg); // 模拟服务端需要对数据处理 try { Thread.sleep(5 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("服务端:数据处理成功,返回成功状态 200"); String status = "200"; csCallBack.process(status); } }
テスト クラス:
public class CallBackTest { public static void main(String[] args) { Server server = new Server(); Client client = new Client(server); client.sendMsg("Server,Hello~"); } }
テスト クラスを実行します。出力される結果は次のとおりです。コードをステップごとに説明します。核となる概要は次のとおりです
客户端:发送的消息为:Server,Hello~ 客户端:异步发送成功 服务端:服务端接收到客户端发送的消息为:Server,Hello~ (这里模拟服务端对数据处理时间,等待5秒) 服务端:数据处理成功,返回成功状态 200客户端:服务端回调状态为:200
3. コールバックのアプリケーション シナリオ
現在、コールバックはどのようなシナリオでより頻繁に使用されていますか?オペレーティング システムから開発者への呼び出し:
1、接口作为方法参数,其实际传入引用指向的是实现类 2、Client的sendMsg方法中,参数为final,因为要被内部类一个新的线程可以使用。这里就体现了异步。 3、调用server的getClientMsg(),参数传入了Client本身(对应第一点)。
追加: フィルターとインターセプターの違いは、インターセプターは Java のリフレクション メカニズムに基づいており、コンテナとは何の関係もないことです。ただし、コールバック メカニズムと同じ目的があります。
つまり、この設計により、基礎となるコードが上位レベル (実装層) によって定義されたサブルーチンを呼び出すことができるようになり、プログラムの柔軟性が向上します。
4. モードの比較
上で述べたように、Filter と Intercepter は同じ目的を持っています。実際、インターフェイスのコールバック メカニズムもデザイン パターンに似ています。オブザーバー パターン:
オブザーバー パターン:
GOF は、「オブジェクトの 1 対多の依存関係を定義します。オブジェクトの状態が変化したとき」と述べています。このとき、それに依存するすべてのオブジェクトに通知および更新が行われます。これは、インターフェイスのコールバック メソッドを通じて実装されるパターン、つまりコールバックの表現です。
インターフェイス コールバック:
とオブザーバー パターンの違いは、これが特定の実装ではなく原則であることです。
5. 体験
4 つのステップのまとめ:
メカニズムが原理です。
パターンは現れます。特定のシナリオと一般的なパターンを覚えてください。
次に、原則を深く理解します。
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
