java--スレッド呼び出し可能インターフェース

回します。https://www.cnblogs.com/selene/p/5972882.html

非同期操作呼び出し可能インターフェースを使用することを検討してください

二つの方法で実装マルチスレッドアプリケーションでは、1は、Runnableインタフェースを実現することで、他は、Threadクラスの継承があり、これらの2つの方法には欠点があります:runメソッドが値を返さない、(最終的な分析、これらの2つの欠点を投げることができませんあなたがデザインするユーザーのニーズの結果にスレッドを実行するために知っておく必要がある場合は、Runnableインタフェースの欠陥は、スレッドクラスは、)、Runnableインタフェースを実装しているスレッドクラス自体は、戻り値、および例外を提供していません。しかし、Java1.5は、Runnableインタフェースに似ている新しいインターフェイスコーラブルを導入当初から、それはマルチスレッドのタスクを達成することができ、次のように、呼び出し可能インターフェースが定義されています。

パブリック インターフェース呼び出し可能<V> {
     / **
     *は、結果を計算し、またはそうすることができない場合に例外をスローします。
     *
     * @return 計算結果
     * @throws 結果を計算することができない場合、例外を
      * / 
    )(Vコールがスロー例外。
}

呼び出し可能インターフェースは、それはまだ、次のように、のは、クラスの割り当てを書いてみましょう、実行することで行う必要があり、マルチスレッドコンピューティングパワーを持っていることを意味するものではありません、それが呼び出すことができるタスクであることだけが、クラスを達成するために: 

// 税電卓
クラス TaxCalculator 実装呼び出し可能<整数> {
     // 主な
    プライベート int型のseedMoney。

    //は、メインスレッドによって提供されるパラメータを受け取る
    パブリック TaxCalculator(INT {_seedMoney)を
        seedMoney = _seedMoney。
    }

    @オーバーライド
    公共の整数コール()スロー例外{
         // テイク2秒実行し、複雑な計算を 
        TimeUnit.MILLISECONDS.sleep(2000 );
         返す / 10 seedMoneyを
    }
}

ここでは、複雑な動作をシミュレート:税の計算機は、この操作は、ユーザがシステムがまだ実行されていることを知らせて、出力する必要があり、これが何であるか、この時間は、ユーザーがそれを待っている聞かせていない、10秒かかる場合がありますユーザーの入力に時間がかかり、業務進捗状況が表示されている場合は、出力されます:システムの使いやすさを反映しています。私たちは、計算を指示した場合、唯一のメインスレッドがあり、税が計算されていない場合には最良の方法は、メインスレッドが何をしているので、スレッドの動作を再開することで、この時点でので、それは、フォローアップのアクションを実行しないであろう、優しいヒントを持っていることは不可能です次のように、進行状況をヒント:

パブリック 静的 ボイドメイン(文字列[]引数)スローInterruptedExceptionあるが、
            ExecutionException {
        //はシングルスレッドアクチュエータを非同期生成 
        ExecutorServiceのES = Executors.newSingleThreadExecutor();
         // 実行のスレッドの後に所望の値 
        将来<整数> = es.submit将来の(新しい新しい TaxCalculator(100 ));
         ながら(!Future.isDone( )){
             // まだ完了していない操作、200ミリ秒待つ 
            TimeUnit.MICROSECONDS.sleep(200を);
             // 出力進捗シンボル 
            System.out.printの( "*" );
        }
        System.out.println( "\ n型計算が完了すると、税がある:" + future.get()+ "メタ" );
        es.shutdown();
    }

このコードでは、エグゼキュータツールは、一般的に非同期演算入口クラスである等newFixedThreadPoolアクチュエータ、例えばシングルスレッドアクチュエータnewSingleThreadExecutor非同期非同期アクチュエータ、スレッドの固定数を作成する機能を提供する静的クラスです。今後の懸念は、スレッドの実行の結果である、何も操作が完了していないなど、結果がどのくらいなどです。次のようにこのコードの動作は、結果:

      ********************************************** .... 。..

      計算、税は次のとおりです:10

  実行すると、「*」の昇順になり、業務の進行状況をユーザーに提供し、システムが正常に動作していることを示し、そのような非同期計算の利点は次のとおりです。

  • 高速動作を提供するなど、多くのシステムリソース、
  • 戻り値がある場合に異常がある場合、実装は、そのような実装が完了したかどうかなど、スレッドを監視することができます。
  • このような事業の進捗状況の一例として、ユーザーのためのより良いサポートを提供することができます。

おすすめ

転載: www.cnblogs.com/jvStarBlog/p/11796329.html