Java-nio-asynchronous-filechannel
Java NIO-AsynchronousFileChannel
Java NIOは並行性とマルチスレッドをサポートしているため、異なるチャネルを同時に同時に処理できるため、Java NIOパッケージでこれを担当するAPIは、NIOチャネルパッケージで定義されるAsynchronousFileChannelです。 AsynchronousFileChannelの場合は java.nio.channels.AsynchronousFileChannel です。
AsynchronousFileChannelはNIOのFileChannelに似ていますが、スレッドがアクションを開始してリクエストが完了するまで待機する同期I/O操作とは異なり、このチャネルではファイル操作を非同期に実行できる点が異なります。したがって、非同期チャンネルは安全に使用できます。複数の同時スレッドによる。
非同期では、要求はスレッドによってオペレーティングシステムのカーネルに渡され、スレッドが別のジョブの処理を続行している間に実行されます。カーネルのジョブが完了すると、スレッドに信号を送り、スレッドは信号に応答して現在のジョブを中断し、処理します必要に応じてI/Oジョブ。
並行性を実現するために、このチャネルは、* java.util.concurrent.Futureオブジェクト*を返す方法と、 java.nio.channels.CompletionHandler 型のオブジェクトを操作に渡す方法の2つの方法を提供します。
例を使用して、両方のアプローチを1つずつ理解します。
- Future Object -これには、チャネルからFuture Interfaceのインスタンスが返されます。FutureInterfaceには、他のタスクのさらなる実行に基づいて非同期的に処理される操作のステータスを返す* get()メソッドがありますまた、 *isDone メソッドを呼び出すことで、タスクが完了したかどうかを確認できます。
例
次の例は、Futureオブジェクトの使用方法と非同期でタスクを実行する方法を示しています。
出力
- 完了ハンドラ- +このアプローチは非常に簡単です。CompletionHandlerインターフェースを使用し、I/O操作が正常に完了したときに呼び出される* completed()メソッドと、次の場合に呼び出される failed()*メソッドの2つのメソッドをオーバーライドしますI/O操作は失敗します。この場合、タスクが完了するとハンドラーのみが実行される機能を持つため、非同期I/O操作の結果を使用するハンドラーが作成されます。
例
次の例は、CompletionHandlerを使用して非同期にタスクを実行する方法を示しています。