実行可能なスイングワーカースレッドの数には上限がありますか、それともメモリがサポートする限りですか?これはどこかで設定可能ですか?実行できるスイングワーカースレッドの最大数は
答えて
SwingWorker
はスレッド自体ではなく、スレッドで実行されるタスクです。通常、ExecutorService
を使用してSwingWorker
のインスタンスを実行します。あなたはそれ以上のインスタンスSwingWorker
nより、彼らはキューに入れ、プールからのスレッドが利用可能になるまで待たなければならない提出する場合は、今すぐ
int n = 20; // Maximum number of threads
ExecutorService threadPool = Executors.newFixedThreadPool(n);
SwingWorker w; //don't forget to initialize
threadPool.submit(w);
:このインタフェースはまた、スレッド数を設定することができます。
理論的に言えば、それぞれのスレッドを個別に実行すれば、任意の数のSwing Workerタスクを実行できます。 –
原則としてはい。もちろんコンピューティングパワーが問題になります。 – mort
um ....何ですか?なぜあなたはこれをしますか? SwingWorkerにはデフォルトのサイズ10のプールがあり、 'SwingWorker#execute()'を呼び出すと、タスクのスケジューリングを行います.'このSwingWorkerをワーカースレッドで実行するようにスケジューリングします。利用可能なワーカースレッドがいくつかあります。 ':https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html#execute()...これを自分で行うことは再発明しています車輪。 SwingWorkerは作成されたユーティリティなので、これを行う必要はありません。あなたがこれを行う唯一の理由は、デフォルトのプールサイズが10より小さすぎる場合です。その時点で、生の 'Runnable'を使用します – searchengine27
final int corePoolSize = 100;
final int maximumPoolSize = 100;
final long keepAliveTime = 100000;
final TimeUnit unit = TimeUnit.SECONDS;
final BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(maximumPoolSize);
sun.awt.AppContext.getAppContext().put(SwingWorker.class,
new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue));
上記のコードサンプルでは、既定数のSwingWorkersを実行することができます。もちろん、いくつかのバックドアsun.awt.AppContextクラスにアクセスしていますが、それは関心のある人にとっては簡単な回避策であり、独自のExecutorServiceを提供することはできません。
- 1. アプリケーションで実行できるスレッドの最大数は?
- 2. MySQLは最大行数を数える
- 3. CPU上で実行されるスレッドの最大数を最適化する
- 4. PHP「最大実行時間」
- 5. テキストファイルの最大行数
- 6. PHP MySQLのデータベースとの最大同時実行数
- 7. リストビューで最大24の行数と100の行数を表示
- 8. numpy配列値の最大実行
- 9. 最大ヒープサイズを大きくすると、スレッドの最大数が減少するのはなぜですか?
- 10. MKMapKit実質的なMKPolylinesの最大数
- 11. 大きなサイズのテーブルでクエリを実行するための最速の実行時間
- 12. Python平均最大Y(n実行)
- 13. 送信試行の最大回数
- 14. 行IDの最大値は?
- 15. WebDriverは一度に最大数のドライバを実行しますか?
- 16. 行数が最大の行を返す方法は?
- 17. JavaScriptのログイン試行の最大数をカウントするには?
- 18. 最大10進値より大きい数値での作業
- 19. 大きな行列上でjavaでPCAを実行する
- 20. Webメソッドの最大数は?
- 21. 条件付きで関数を実行する最善の方法は?
- 22. セッション変数に保持できる最大サイズは?
- 23. 1つのCUDAカーネルで開始できるスレッドの最大数
- 24. MQ最大再試行回数とバックアウトしきい値
- 25. 等しい最大行数を引き出す
- 26. 最大でn個のJavaスレッドを実行しています
- 27. MKMapViewで描画できる注釈の最大数(MKAnnotation)?
- 28. ASIHTTPリクエストで同時にダウンロードできるファイルの最大数
- 29. tomcatの最大ロール数と最大ログサイズの設定方法は?
- 30. 関数のオーバーロードの最大数は?
私はSwingWorkerと混乱する点は、SwingWorker.execute()メソッドがデフォルト/プライベートスレッドプール上でワーカーを実行することです。これは少数のスレッドに固定されています。これは、小さな/単純なアプリにとってはおそらく十分で妥当なものです。ただし、同時実行性をより詳細に制御するためには、2つの観察を行います。1. SwingWorkersはRunnableFuturesです。2. SwingWorker.execute()メソッドを呼び出してSwingWorkersを実行する必要はありません。だから、独自のスレッドプール(ExecutorService)を必要に応じて構成し、SwingWorkersをsubmit()またはexecute()するだけです。 –