ホームページ  >  記事  >  Java  >  オブジェクトプールの設計パターン

オブジェクトプールの設計パターン

WBOY
WBOY転載
2023-08-19 16:29:21546ブラウズ

オブジェクトプールの設計パターン

#Java プログラミングでよく使用されるソフトウェア設計パターンは、オブジェクト プール設計パターンです。このモードは、オブジェクト プール内のオブジェクトがどのように作成および破棄されるかを制御します。

オブジェクト プール設計パターンを使用して、オブジェクトの生成と破棄を管理します。このパターンの概念は、必要になるたびに新しいオブジェクトを作成するのではなく、再利用可能なオブジェクトを蓄積することです。ネットワーク接続、データベース接続、高価なオブジェクトなど、新しいオブジェクトの作成にコストがかかる状況では、Java プログラマはオブジェクト プール設計パターンを使用することがよくあります。

オブジェクトプール設計の構文

Java では、オブジェクト プール設計パターンの構文は次のとおりです。 -

  • 固定サイズのオブジェクト コレクションを作成します。

  • プールのプロジェクトを初期化します。

  • 現在プール内のアイテムを追跡します。

  • 必要に応じて、プール内にアクセス可能なオブジェクトがあるかどうかを確認してください。

  • 利用可能なオブジェクトをプールから速やかに取得し、必要に応じて適切に返すようにしてください。

  • ただし、このリポジトリに現在利用可能なアイテムがない場合は、時間やリソースの無駄を避けるために新しいアイテムをすぐに作成してから流通に戻すようリクエストします。

オブジェクト プール設計のためのさまざまなアルゴリズム

Java オブジェクト プールの設計パターンは、さまざまなアルゴリズムに使用できます。以下に考えられる 3 つの戦略を示します。それぞれに独自のコード実装があります。

遅延初期化と同期

リーリー

ここで使用される手法は、拡張に修正可能な事前設定された容量制限を備えた遅延同期オブジェクト プールの初期化を通じて、スレッドの安全性を強調しています。空のプールは安全な新しいインスタンスの生成をもたらしますが、フルでないインスタンスは適切な状態を維持するために慎重に再導入されます。運用上の完全性.

同時データ構造を使用した積極的な初期化

リーリー

この実装では、静的な最終インスタンス変数を使用してオブジェクト プールを積極的に初期化します。基礎となるデータ構造は LinkedBlockingQueue であり、同期を必要とせずにスレッドの安全性を提供します。初期化中にオブジェクトがプールに追加され、必要に応じて take() を使用してキューから取得されます。アイテムがリリースされたら、offer() を使用してアイテムを再度キューに入れます。

時間ベースの有効期限

リーリー

このバージョンのオブジェクト プールは、固定サイズではなく、時間ベースの有効期限メカニズムを使用します。オブジェクトが必要な場合、poll() 関数を使用してプールからオブジェクトが削除されます。使用可能なオブジェクトがない場合、関数は一定時間待機して n​​ull を返します。オブジェクトはオンデマンドで生成されます。オブジェクトが存在しない場合は、新しいオブジェクトが生成されて返されます。オブジェクトが解放されたら、offer() を使用してオブジェクトをプールに戻します。 expireObjects() 関数は、指定されたタイムアウト値に基づいて期限切れのアイテムをプールから削除するために使用されます。

オブジェクト プール設計パターンのさまざまな使用方法

Java のオブジェクト プール設計パターンは、さまざまな方法で実装できます。以下に、コード例と結果を含む 2 つの典型的な方法を示します。

方法 1: 単純なオブジェクト プールの設計パターン

シンプルで実用的なオブジェクト プールを構築する 1 つの方法は、配列ベースのアプローチを使用することです。このアプローチは次のように機能します: 完全に生成されると、すべてのオブジェクトは将来の使用に備えて対応する「プール」配列に含まれます。実行時にコレクションがチェックされて、必要な項目が利用可能かどうかが判断されます。既存の在庫から取得できる場合はすぐに返されますが、そうでない場合は、需要に基づいて別の新しいオブジェクトが生成されます。

###例### リーリー ###例### リーリー ###出力### リーリー

方法 2: ユニバーサル オブジェクト プールの設計パターン

この手法では、リストを基礎として使用することで、標準オブジェクト プールの構築が容易になり、オブジェクトが完全に生成されてコレクションに含まれるまでコレクションに保存されます。アイテムへのアクセスが必要になるたびに、システムはプール内の利用可能なオプションを参照します。利用可能なオプションが 1 つあればそれで十分ですが、利用可能なオプションが 1 つもない場合は、別の新しいプロジェクトを作成する必要があります。

###例### リーリー ###出力### リーリー

クラスレベルのロックを使用するためのベスト プラクティス

新しいオブジェクトの作成コストが高い場合、Java プログラマはオブジェクト プール設計パターンを使用することがよくあります。一般的な使用シナリオには、-

が含まれます。 ###インターネット接続###

Java プログラムでは、ネットワーク接続はオブジェクト プール デザイン パターンを使用して管理できます。接続が必要になるたびに新しい接続を作成するよりも、プールから既存の接続を再利用することをお勧めします。これにより、アプリケーションの機能が向上する可能性がありますが、ネットワーク サーバーの負担を軽減します。

データベース接続

ネットワーク接続管理と同様に、Java アプリケーションでもオブジェクト プール設計パターンを使用してデータベース接続を処理できます。データベース接続が必要になるたびに新しい接続を作成するよりも、プールから既存の接続を再利用することをお勧めします。これにより、アプリケーションのパフォーマンスが向上し、データベース サーバーの負荷が軽減されます。

スレッドプール

Java プログラムを使用する開発者は、スレッド プールを効果的に管理するためにオブジェクト プール設計パターンを採用する必要があります。必要な各スレッドを必要に応じて再作成するのではなく、綿密に計画された使用方法は、指定されたワークグループで使用可能な既存のスレッドを再利用することに依存します。したがって、構造の効率によってスレッドの作成および終了プロセスのオーバーヘッドを低く抑えることで、アプリケーションのパフォーマンスを最適化します。

###画像処理###

Java プログラムで集中的な画像処理タスクを扱う場合、オブジェクト プール設計パターンの実装を検討する価値があります。専用プールの既存のオブジェクトを利用することで、写真編集タスクの全体的なコンピューティング需要を軽減しながら、アプリケーションのパフォーマンスを高速化できます。

ファイルシステム操作

Java アプリケーションで重い画像処理タスクに直面している場合は、オブジェクト プール設計パターンの適用を検討する価値があります。この手法では、特定のプール内の既存のアイテムを利用して、プログラムの出力速度を向上させ、写真の編集に必要なコンピューティング リソースを削減します。

###結論は###

オブジェクト プール設計パターンは、Java プログラミングにおける便利な設計パターンであり、新しいオブジェクトの作成コストが高い状況に適しています。これにより、再利用可能なオブジェクトの供給を制御する方法が提供され、新しい製品の作成にかかる全体的なコストが削減されます。シンプル オブジェクト プールまたは汎用オブジェクト プールは、オブジェクト プール デザイン パターンを実装する 2 つの例です。オブジェクト プールの設計パターンは、データベース接続やネットワーク接続などの高価なオブジェクトを処理するために Java プログラミングでよく使用されます。目的は Flyweight パターンや Singleton パターンと似ていますが、用途が異なります。

以上がオブジェクトプールの設計パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。