web-dev-qa-db-ja.com

データベース操作のタスクとサービス

JavaFX 8タスクとサービスの違いは何ですか?その場合、どちらか一方を使用する方が良いですか?データベース操作で使用するのに適したものは何ですか?

29
Peter Penzov

タスクとサービスの主な違い-1回の実行と繰り返しの実行

タスク は1回限りのことです-タスクは1回しか使用できません。同じタスクを再度実行する場合は、新しいタスクインスタンスを作成する必要があります。

Service には再利用可能なインターフェースがあるため、1つのサービスインスタンスを複数回起動および再起動できます。舞台裏では、入力としてタスク定義を受け取り、必要に応じて新しいタスクを作成します。

ユースケースの例

タスクの例=>このように、アプリケーションの初期化時に長時間実行される起動タスクの進行状況を監視および報告します スプラッシュページの例

サービスの例=> WebEngineの内部ロードワーカー実装 ここで、ページを非同期にロードする同じタスクを、ロードされるページごとに繰り返す必要があります。

推奨事項-最初は、サービスではなくタスクのみを使用して問題の解決を試みてください

JavaFXの同時実行性に慣れるまでは、サービスではなくタスクのみを使用することをお勧めします。タスクのインターフェースは少し単純です。必要なときに新しいタスクインスタンスを作成するだけで、サービスが行うことのほとんどを実行できます。タスクを理解した後、タスクを開始または再開するための事前定義されたAPIが必要な場合は、その時点でサービスの使用を開始します。

タスクを使用したデータベースアクセスサンプル

タスクまたはサービスのいずれかが、JavaFXアプリケーションスレッドからデータベース操作を実行するために機能します。どちらを使用するかは、個人のコーディング設定と、実行されている特定のデータベース操作によって異なります。

JDBCを介してデータベースにアクセスするタスク を使用する例を次に示します。この例は、 JavaFX-SQLクエリのバックグラウンドスレッド 用に作成されました。

背景情報

JavaFX同時実行チュートリアル は、タスクとサービスの概要を示しています。

Task および Service javadocには、ユースケースなどのサンプルコードを含む優れたドキュメントがあります。

ワーカー、タスク、およびサービスの定義(Javadocから)

タスクとサービスはどちらも Workers であるため、共通点があります。

ワーカーは、1つ以上のバックグラウンドスレッドでいくつかの作業を実行するオブジェクトであり、その状態はJavaFXアプリケーションで監視および利用可能であり、メインのJavaFXアプリケーションスレッドから使​​用できます。

タスクの定義:

FutureTask の完全に観察可能な実装。タスクは、JavaFXで非同期タスクをプログラミングするのに役立つ追加の状態と監視可能なプロパティを公開します。 。サービスはタスクを実行するように設計されているため、アプリケーションまたはライブラリコードで定義されたタスクはすべてサービスで簡単に使用できます。

サービス定義:

サービスは、1つ以上のバックグラウンドスレッドでいくつかの作業を実行するために必要な情報をカプセル化する非ビジュアルコンポーネントです。 JavaFX UIライブラリの一部として、サービスはJavaFXアプリケーションスレッドを認識し、アプリケーション開発者がユーザーインターフェイスと対話するマルチスレッドコードを管理する負担から解放されるように設計されています。そのため、サービスのすべてのメソッドと状態は、JavaFXアプリケーションスレッドから排他的に呼び出されることを目的としています。

サービスはワーカーを実装します。そのため、バックグラウンド操作の状態を監視し、オプションでキャンセルすることができます。サービスは再利用可能なワーカーです。つまり、サービスをリセットして再起動できます。このため、サービスを宣言的に構築し、オンデマンドで再開できます。

52
jewelsea