JavaのRunable、Callable、Future、FutureTask、ExecutorService、Excetor、Excutors、およびThreadPoolexcetorは、これらのキーワードとその使用を要約しています。
それらを最初に分類します:
実行可能、呼び出し可能
将来、FutureTask
executorservice、excetor、excutors、threadpoolexcetor
1。実行可能で呼ばれることについて
まず、Javaにスレッドを作成する3つの方法があります。
3つの実装の利点と短所:
スレッドを継承するため、他のクラスを継承することはできず、現在のスレッドを取得できます。
実行可能なインターフェイスを実装し、返品値なし、現在のスレッドスレッドを取得します。currentthread()
呼び出し可能なインターフェイスを実装すると、future.get()を介して戻り値を取得し、現在のスレッドスレッドを取得できます。currentthread()
継承スレッド、2つのステップ:
class demothread extends thread {@override public void run(){super.run(); //時間のかかる操作を実行します...}} demothread t = new demothread(); t.start();実行可能な実装には、通常は次のように使用します。
新しいスレッド(new runnable(){@override public void run(){// do Something}})。start();簡単に。
上記の2つの方法でスレッド実行の結果を取得することは非常に厄介であり、直接取得することはできません。 JDK1.5は、値を返し、例外をスローするために、Callable、CallableのCall()メソッドを追加します。 Callableは、計算結果がロードされた将来のオブジェクトを返すことができます。
呼び出し可能なソースコード:
パブリックインターフェイスコール可能<v> {v call()スロー例外;}コール可能な基本的な使用法:
FutureTask <Integer> futureTask = new FutureTask <Integer>(new Callable <Integer>(){@Override public Integer Call()Throws Exception {// return null;}}呼び出し可能なタスクを実行すると、将来のオブジェクトを取得し、将来のget()メソッドを介してスレッドによって実行されるリターン値を取得できます。それから...未来、
FutureTaskとそれを使用する方法の違いは何ですか?
- > next()
2。未来とFutureTaskについて
スレッドの実行結果を取得するために、FutureのFutureTaskが導入されました。それで、彼らの関係は何ですか、そしてそれをどのように使用するか?
将来のクラスは、インターフェイスであるjava.util.concurrentパッケージの下にあります。
パブリックインターフェイスFuture <v> {booleanキャンセル(boolean may interrumpifrunning); Boolean IsCancelled(); boolean isdone(); v get()throws arturnedexception、executionexception; v get(長いタイムアウト、タイムニットユニット)断続的なエクセプト、executionexception、timeoutexception;}将来は5つの方法を定義します:
1)Boolean Cancel(Boolean May interrumpifrunning):このタスクの実行をキャンセルしようとします。タスクが完了した、またはキャンセルされた、または他の理由でキャンセルできない場合、この試みは失敗します。 Cancel()が呼び出されると、呼び出しが成功し、タスクが開始されていない場合、タスクは実行されません。タスクが開始された場合、may interrumprunningパラメーターは、タスクを停止しようとする方法でタスクを実行するスレッドを中断する必要があるかどうかを決定します。この方法が戻った後、ISDONE()への後続の呼び出しは常にtrueを返します。この方法がtrueを返す場合、その後のIsCancelled()への呼び出しは常にtrueを返します。
2)Boolean IsCancelled():タスクが正常に完了する前にキャンセルされた場合はtrueを返します。
3)boolean isdone():タスクが完了した場合にtrueを返します。これは、通常の終了、例外、またはキャンセルのために行われる場合があります。これらすべての場合、この方法はtrueを返します。
4)v get()スローが中断されたException、executionException:必要に応じて、計算が完了するのを待ってから結果を得ます。
5)v Get(Long Timeout、TimeUnit Unit)Strows arturnedexception、executionexception、timeoutexception:必要に応じて、指定された時間の後に最大で計算を完了し、結果を取得します(結果が利用可能な場合)。
一般に、Futureは3つの機能を提供します。
タスクが完了したかどうかを判断します。
タスクを中断する能力。
タスク実行結果を取得できます。
キーポイント:
runnableFutureは、実行可能なインターフェイスと将来のインターフェイスを継承し、FutureTaskは実行可能なフチャーインターフェイスを実装します。
FutureTaskの実装:
Public Class FutureTask <V>は、RunnableFuture <v>を実装しています
RunnableFutureインターフェイスの実装:
public interface runnablefuture <v>拡張Runnable、Future <v> {void run();}FutureTaskは、将来のインターフェイスのユニークな実装クラスです。
FutureTaskをスレッドで包むことに加えて、それを使用する別の方法があります。
executorservice executor = executors.newcachedthreadpool(); futuretask <integer> futuretask = new futuretask <integer>(new callable <integer>(){@override public integer call()throws exception {// use null;}})ここでは、執行者のフレームワークが使用されています。
- > next();
3。Executorservice、Excetor、Excutors、ThreadPoolexcetorについて
エグゼキューターフレームワークはJava 5で導入されました。エグゼクティブフレームワークは、ポリシーコール、スケジュール、実行、および制御を実行する非同期タスクを実行するフレームワークです。
執行者のフレームワークについて話す前に、新しいコンセプトを紹介する必要があります-ThreadPoolexecutor:
public threadpoolexecutor(intcorepoolsize、int maximummumpoolsize、long keepalivetime、timeunit unit、blockingqueue <runnable> workqueue、threadfactory threadfactory、requiredexecutionhandlerハンドラー)
ThreadPoolexecutorは、執行者クラスの基礎となる実装です。
JDKヘルプドキュメントには、パッセージがあります。
「プログラマーは、より便利なエグゼクティブファクトリーメソッドエグゼクティアを使用することを強くお勧めします。NewCachedThreadPool()(自動スレッドリサイクルを実行できる未結合のスレッドプール)、executors.NewFixedThreadPool(INT)(INT)(固定サイズのスレッドプール)、およびexecutors.NewSingLethExecutor()
それでは、executorservice、excetor、およびexcutorsとは何ですか?
Excetorは、抽象レベルのコアインターフェイスです。
public interface executor {void execute(runnableコマンド);}ExecutorServiceインターフェイスは、エグゼキューターインターフェイスを拡張し、将来のオブジェクトの返却、終了、スレッドプールの閉鎖などのメソッドを提供します。
Public Interface ExecutorServiceはexecutorを拡張します{void shutdown(); <t> future <t> submit(callable <t> task); <t> future <t> submit(runnable task、t result); <t> list <future <t >> invokeall(collection <?extends callable <t >>タスク、ロングタイムアウト、タイムナイトユニット)が断続的なexception;}執行者は、コレクションに似たツールクラスです。 Factoryメソッドを提供して、FixedThreadPoolやCachedThreadPoolなど、さまざまな種類のスレッドプールを作成します。
public class executors {public static executorservice newfixedthreadpool(int nthreads){return new SthreadPoolexecutor(nthreads、nthreads、0l、timeunit.milliseconds、new linkedblockingqueue <runnable>()); } public static executorservice newCachedThreadPool(){return new SthreadPoolexecutor(0、integer.max_value、60l、timeunit.seconds、new synchronousqueue <runnable>()); }}上記は、Java Multi-Threadedキーワードの編集であるため、乱雑ではありません。
上記は、編集者が紹介したJavaでのマルチスレッドキーワードソートの実装です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!