【翻訳19】-javaのアクチュエータ

7165 ワード

Executors
In all of the previous examples, there's a close connection between the task being done by a new thread, as defined by its  Runnable  object, and the thread itself, as defined by a Thread  object. This works well for small applications, but in large-scale applications, it makes sense to separate thread management and creation from the rest of the application. Objects that encapsulate these functions are known as executors. The following subsections describe executors in detail.
  • Executor Interfaces  define the three executor object types.
  • Thread Pools  are the most common kind of executor implementation.
  • Fork/Join  is a framework (new in JDK 7) for taking advantage of multiple processors.

  • 訳文:アクチュエータは以前のすべてのインスタンスで、新しいスレッドを使用してタスクに近接した接触を持っています.Runnableオブジェクトとして定義されたスレッドと、スレッドは、Threadオブジェクトによって定義されます.これは小型プログラムでよく機能しますが、大型プログラムではスレッドと他のプログラムを別々に管理する必要があります.これらの関数をカプセル化したオブジェクトはexecutorsです.次の章ではexecutorsについて詳しく説明します.
  • 実行インタフェースは、3つの実行オブジェクトタイプ
  • を定義する.
  • スレッドプールは最も一般的な実行実装である.
  • は、マルチプロセッサにとって非常に有用なフレームワーク(JDK 7で新しく追加された)として分離され、統合されています.

  • Executor Interfaces
    The  java.util.concurrent  package defines three executor interfaces:
  • Executor , a simple interface that supports launching new tasks.
  • ExecutorService , a subinterface of  Executor , which adds features that help manage the lifecycle, both of the individual tasks and of the executor itself.
  • ScheduledExecutorService , a subinterface of  ExecutorService , supports future and/or periodic execution of tasks.

  • Typically, variables that refer to executor objects are declared as one of these three interface types, not with an executor class type.
    The  Executor  Interface
    The  Executor  interface provides a single method,  execute , designed to be a drop-in replacement for a common thread-creation idiom. If  r  is a  Runnable  object, and  e  is an  Executor  object you can replace
    (new Thread(r)).start();
    
    

    with
    e.execute(r);
    
    

    However, the definition of  execute  is less specific. The low-level idiom creates a new thread and launches it immediately. Depending on the  Executor  implementation,  execute  may do the same thing, but is more likely to use an existing worker thread to run  r , or to place  r  in a queue to wait for a worker thread to become available. (We'll describe worker threads in the section on  Thread Pools .)
    The executor implementations in  java.util.concurrent  are designed to make full use of the more advanced  ExecutorService  and ScheduledExecutorService  interfaces, although they also work with the base  Executor  interface.
    The  ExecutorService  Interface
    The  ExecutorService  interface supplements  execute  with a similar, but more versatile  submit  method. Like  executesubmit accepts  Runnable  objects, but also accepts  Callable  objects, which allow the task to return a value. The  submit  method returns a  Future  object, which is used to retrieve the  Callable  return value and to manage the status of both  Callable  and Runnable  tasks. ExecutorService  also provides methods for submitting large collections of  Callable  objects. Finally,  ExecutorService  provides a number of methods for managing the shutdown of the executor. To support immediate shutdown, tasks should handle interrupts  correctly.
    The  ScheduledExecutorService  Interface
    The  ScheduledExecutorService  interface supplements the methods of its parent  ExecutorService  with  schedule , which executes a Runnable  or  Callable  task after a specified delay. In addition, the interface defines  scheduleAtFixedRate  and scheduleWithFixedDelay , which executes specified tasks repeatedly, at defined intervals.
     
    訳文:実行インタフェースjava.util.concurrentパッケージには、3つの実行インタフェースが定義されています.
  • エグゼクティブは、新しいタスクのロードをサポートする簡単なインタフェースです.
  • は、プライベートなタスクとアクチュエータ自体を含む管理ライフサイクルの特性を増加させるサービスを実行します.
  • は、実行サービスをスケジューリングし、サービスのサブインタフェースを実行し、将来または周期的に実行されるタスクをサポートする.

  • 代表的に、実行可能なオブジェクト変数は、実行可能なクラスのタイプではなく、この3つのタイプの1つとして定義されます.エフェクタインタフェースExecutorインタフェースは、一般的なスレッドの作成ルールを定義する簡単な方法を提供します.rがRunnableオブジェクトであり、eがエフェクタオブジェクトである場合は、次の方法で置き換えることができます.  (new Thread(r)).start();代替:e.execute(r);しかし、executeの定義はそれほど厳しくない.低レベルのスレッドを作成するルールは、作成後すぐにロードすることです.Executerインタフェースの実装に依存して、executeは同じことを実装することができます.しかし、すでに催促されたワークスレッドで実行するか、rの代わりにキューでワークスレッドが使用可能になるのを待つのが好きです.(このセクションでは、ワークスレッドについて説明します)java.util.concurrentで考えられるエフェクタは、ExecutorServiceおよびScheduleExecutorServiceインタフェースをより十分に使用するように定義されています.彼らはExecutorインタフェースに基づいていますが.サービスインタフェースを実行サービスインタフェースを実行すると、エフェクタが補完されますが、より多くの一般的なコミット方法があります.エフェクタのように、コミットメソッドはRunableオブジェクトを受け入れますが、金額Callableオブジェクトも受け入れられ、その語順タスクは値を返します.submitメソッドは、Callableの戻り値を再取得し、CallableおよびRunnableタスクのステータスを管理するために使用されるFutureオブジェクトを返します.サービスを実行することで、Callableオブジェクトの大規模なセットをコミットする方法も提供されます.ExecutorServiceは、多くの方法でアクチュエータを閉じることを管理します.即時コミットをサポートするためには、interruptsメソッドを正しく実装する必要があります.スケジューリング実行サービスインタフェーススケジューリングサービスインタフェースは、その親に基づいてサービスを実行する多くのスケジューリング方法を提供し、RunnableまたはCallableタスクを指定された遅延後に実行することができる.さらに、このインタフェースはschedulAtFixedRateとscheduleWithFixDelayを定義し、定義された間隔内で指定されたタスクを繰り返し実行することをサポートします.