2

私のアプリケーションでは、次の方法でキャッシュをロードしています。

  1. ユーザーキャッシュを読み込む loadUserCache();
  2. アカウント キャッシュを読み込む loadAccountCache();
  3. 顧客キャッシュを読み込む loadCustomerCache();

上記の各呼び出しには、データベース呼び出しが含まれます。同様に、6〜7回の呼び出しがあります。

アプリケーションが読み込まれると、キャッシュが読み込まれるまで待たなければなりません。

これらはすべて順次呼び出しです。

これらの呼び出しを並行して行う方法を見つけることができれば、アプリケーションの読み込み中の待ち時間は大幅に短縮されます。

誰かがそのような並列呼び出しまたは他の代替アプローチを行うのを手伝ってくれますか?

前もって感謝します。

4

3 に答える 3

7

マルチスレッドを探しています。concurrencyの公式チュートリアルをご覧ください

を作成しThread、ランナブルをオーバーライドします。

スレッドで呼び出すstart()と、各スレッドは互いに並行して呼び出されます。

別の方法は、高レベルの並行性 API、特にExecutorsを使用することです。

ただし、並列プログラムでデータ競合デッドロックが発生しないようにする必要があります。[タスク間に何らかの依存関係がある場合、これは些細なことではないかもしれません]。

于 2012-04-18T15:21:27.350 に答える
3

エグゼキュータ フレームワークを使用できます。

public static void main(String args[]) throws InterruptedException {
    ExecutorService executor = Executors.newFixedThreadPool(3);
    Runnable user = new Runnable() {
        @Override
        public void run() {
            loadUserChache();
        }
    };
    Runnable account = new Runnable() {
        @Override
        public void run() {
            loadAccountCache();
        }
    };
    Runnable customer = new Runnable() {
        @Override
        public void run() {
            loadCustomerCache();
        }
    };

    executor.submit(user);
    executor.submit(account);
    executor.submit(customer);

    executor.shutdown();
    executor.awaitTermination(10, TimeUnit.SECONDS); //handle timeout here
}
于 2012-04-18T15:34:01.683 に答える
1

並行して実行するコードのブロックごとに新しいスレッドを起動します。

    new Thread(new Runnable(){
       loadUserCache();
    }).start();

    new Thread(new Runnable(){
       loadAccountCache();
    }).start();

    new Thread(new Runnable(){
       loadCustomerCache();
    }).start();

または

    new Thread(new Runnable(){
       loadUserCache();
       loadAccountCache();
       loadCustomerCache();
    }).start();

はい、この一般的なトピックは、あらゆる種類の問題をすぐに引き起こす可能性があります。マルチスレッドのコードは非常に複雑になる可能性がありますが、あなたの場合は上記で十分かもしれません。

于 2012-04-18T15:27:40.633 に答える