Java ExecutorService NewFixedThreadpoolに関するいくつかの質問 -- java フィールド と executorservice フィールド 関連 問題

A couple of questions regarding Java ExecutorService newFixedThreadPool












0
vote

問題

日本語

通常、この問題について20回以上グーグルの後に質問をしてください。しかし、私はそれを理解することはできません。だから私はあなたの助けが必要です。

基本的には、<コード> newFixedThreadPool

の正確な使用法を理解していません。
  1. newFixedThreadPool(10) は10個の異なるスレッドを持つことを意味しますか?それともそれは同じスレッドの10を持つことができるということですか?または両方? submit() メソッドを20回以上 9988777664で実行しています。

  2. submit() は値を印刷しますか?または、<コード> ExecutorService にスレッドを置くのですか?

英語

Please note that I usually ask a question after googling for more than 20 times about the issue. But I can't still understand it. So I need your help.

Basically, I don't understand the exact usage of newFixedThreadPool

  1. Does newFixedThreadPool(10) mean having ten different threads? Or does it mean it can have 10 of the same threads? or the both? I executed with submit() methods more than 20 times and it's working.

  2. Does submit() print a value? Or are you putting threads in the ExecutorService?

</div
     
     
     

回答リスト

2
 
vote

簡単に言うと、タスクは並行して実行可能なコードの単位(コードセクション)です。スレッド(スレッドプール内)はそれらを実行するものです。あなたは労働者のようなスレッドと仕事のような仕事を考えることができます。ジョブは並行して行うことができ、労働者は並行して動作することができます。労働者は仕事に取り組んでいます。

だから、あなたの質問に答えるために:

  1. newFixedThreadPool(int nThreads) は、同じ入力キューで動作するNTHREADスレッドのスレッドプールを作成します。 NTHREADSは、任意の時間に実行できるスレッドの最大数です。各スレッドは別のタスクを実行できます。例では、同時に最大10個のタスクを実行することができます。 (ドキュメントはここ
  2. submit() 指定されたタスクをスレッドプール内のスレッドによって共有されているイベントキューにプッシュします。スレッドが利用可能になると、キューの前面からタスクが実行されて実行されます。 9988777662 がそれに印刷文を持っていない限り、それは何も印刷しないでください。ただし、タスクを送信するときに印刷ステートメントが印刷されない場合があります。スレッドがその特定のタスクを実行していると印刷されます。 (ドキュメントはこちら)
 

Briefly, tasks are small units of code that could be executed in parallel (code sections). The threads (in a thread pool) are what execute them. You can think of the threads like workers and the tasks like jobs. Jobs can be done in parallel, and workers can work in parallel. Workers work on jobs.

So, to answer your questions:

  1. newFixedThreadPool(int nThreads) creates a thread pool of nThread threads that operate on the same input queue. nThreads is the maximum number of threads that can be running at any given time. Each thread can run a different task. With your example, you can be running up to 10 tasks at the same time. (The documentation can be found here with credit to @hovercraft-full-of-eels)
  2. submit() pushes the given task into an event queue that is shared by the threads in the thread pool. Once a thread is available, it will take a task from the front of the queue and execute it. It shouldn't print anything, unless the Runnable you pass it has a print statement in it. However, the print statement may not be printed right when you submit the task! It will print once a thread is executing that particular task. (The documentation can be found here)
</div
 
 
0
 
vote

GoogllingではなくJava DocsまたはJava APIの説明を参照してください。 あなたの質問のために私はコメントの下にあります。

質問1 - &gt;

executorService executorService = executors.newfixedThreadpool(10);

最初のexecutorServiceは、Executors NewFixedThreadPool()ファクトリメソッドを使用して作成されます。これにより、タスクを実行する10個のスレッドを持つスレッドプールが作成されます。

executors.newfixedThreadPool APIは、 Reuses のスレッドプール、固定数のスレッドとこれらのスレッドがS ***ハンバーされていないキュー***で機能します。 任意の時点で、ほとんどのNTHREADSSスレッドはアクティブな処理タスクになります。 すべてのスレッドがアクティブなときに追加のタスクが送信された場合、スレッドが使用可能になるまでキュー内で待機します。 シャットダウン前に実行中に障害が発生したため、スレッドが終了した場合、新しいタスクを実行するために新しいものが必要になります。プール内のスレッドは、明示的にシャットダウンされるまで存在します。 20のタスクを送信した後、このスレッドプールで動作しました。

内部でコードの下のコードを呼び出します。 Public Static ExecutorService NewFixedThreadpool(int nthreads){ New ThreadPoolExetCutor(Nthreads、Nthreads、 0L、TimeUnit.milliseconds 新しいLinkedBlockingQueue())。

質問2 - &gt。実行中の実行可能なタスクを送信するために実行可能なタスクを送信し、タスクを表す将来のオブジェクトのオブジェクトのオブジェクトを返すこともできます。将来のGETメソッドを使用して、送信されたタスクが正常に完了したかどうかを確認することができます。

 

Just refer java docs or JAVA API's description rather than googling it. For your questions I have below comments .

Question 1 ->

ExecutorService executorService = Executors.newFixedThreadPool(10);

First an ExecutorService is created using the Executors newFixedThreadPool() factory method. This creates a thread pool with 10 threads executing tasks.

Executors.newFixedThreadPool API creates, a thread pool that reuses a fixed number of threads and these threads work on a s***hared unbounded queue***. At any point, at most nThreads threads will be active processing tasks. If additional tasks are submitted when all threads are active, they will wait in the queue until a thread is available. If any thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks. The threads in the pool will exist until it is explicitly SHUTDOWN. After submitting even 20 tasks ,it worked with this thread pool.

Internally it calls below line of codes . public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); }

Question 2- > Submits a Runnable task for execution in Queue and it can also return an Object of type Future Object representing task. we can use Future's get method to check whether submitted task has successfully completed or not because it will return null upon successful completion.

</div
 
 

関連する質問

0  Androidのサービス内のexecutorServiceを使用してください  ( Using executorservice in a service in android ) 
私のアプリケーションでは、executorServiceをアクティビティから使用しています。 そのアクティビティをバックグラウンドで実行されているサービスに変換したいです。 私はすべての変更が加えられましたが、executorServiceの「送信」に問題があ...

4  長い計算により、executOrServiceは新しい作業の割り当てを停止します  ( Long computation causes executorservice to stop assigning new work ) 
PNGファイルのディレクトリに作業するために5つのpngout.exeプロセスを産むことによってPNGファイルを最適化しています。 PNGOUTはシングルスレッドであるため、これは大きなスピードアップをもたらします。ノルムは5秒である間、最適化には長い時間が...

0  ThreadPoolExecutorとjoin()  ( Threadpoolexecutor and join ) 
SOMESEREXECUTERを使用して、データに対していくつかの作業を実行しています。問題は、スレッドプールエキサリータにスケジュールされたワークスレッドが完了する前にSomEviceTestが完了します。 SomeServiceスレッドを作業スレッドと結...

0  HTMLUnit WebClientスレッドの中断ステータスをリセットします  ( Htmlunit webclient resets thread interruption status ) 
Priseparserクラスをサブクラス化し、getAllPrices()メソッドを実装するパーサークラスの束を持っています(Priseparser.getPrices(priseparser.getPrices()は、この記事に関連しないPRISepars...

0  executorService  ( Executorservice where to store ) 
executorサービスは、RTTと待ち時間から保存するために、3番目のパーティのサービスを保存するために、3番目のパーティの要求を同時に発射することを計画しています。 リクエストごとにexecutorServiceを作成する必要があるかどうかを知りたいで...

2  Java:Callables:invokeall()とfuture.get() - 正しい順序で結果が発生しますか?  ( Java executorservice with callables invokeall and future get results in ) 
invokeAll() でスレッドを呼び出すためのexecutorServiceを使用しているIM。その後、 future.get() で結果セットを取得します。私がスレッドを作成したのと同じ順序で結果を受け取ることが本当に重要です。 これはスニペットです...

3  ExecumerServiceをJavaでキャンセルする方法  ( How to cancel an executorservice in java ) 
ExecutorService を使用してスレッドを実行し、このように終了するまで待機するアプリケーションを書きました。 <事前> <コード> ExecutorService exService; exService = Executors.newCach...

1  ConcurrentModificationExceptionマルチスレッドをバッチで実行しようとしています  ( Concurrentmodificationexception when trying execute multithread in batches ) 
MultithReadプロセスのexecutorServiceを使用しています - IDのリストは、iDの一部がスレッドを使用してコードの一部を作ります。 <事前> <コード> ExecutorService executor = Executors.n...

0  executorService.shutdownnow()を呼び出すことで、webclient get()Exchange()を停止する方法?  ( How to stop webclient get exchange by calling executorservice shutdownnow ) 
私はそのようなことを解決することができる方法を教えてください。 Spring Webflux WebClientを介してURLからイメージを取得しようとしている間 - 停止しません。 次のコード <事前> <コード> method1(){ ... Execut...

3  実行するタスクのツリーを使ってexecutorServiceを使用してください  ( Using executorservice with a tree of tasks to perform ) 
私たちは少し問題を抱えていました。 :) Nスレッドのみがいつでもバックグラウンドタスクを実行していることを確認します。これを行うには、固定スレッドプールエグゼキュータを使用しました。それはうまく機能しているようです。 それから問題を見つけました。 exec...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有