2013-06-27 10 views
7

誰かが作成できるスレッドの数に制限を設定するにはどうすればよいですか?私がしていることは、誰かのコード(ideoneのようなもの)を動かして、彼が生み出すことができるスレッドの数を制限したいのです。それを行う方法?いくつかのjvmの設定や何か他の?JVMで使用されるスレッドの数を制限する

EDIT 私は特定の情報を追加する人がいます。

  1. いくつかのランダムな男が私に私のコンピュータがコードをkスレッド
  2. すべての最大値を使用して内で実行する必要があります
  3. 実行しようとしているコードを送信するには、自動化されなければならない - などSPOJ、ideone、のような作業
+0

Javaバイトコードインジェクタはおそらく? java-profilerのように、しかし検査の代わりに物事を追加します。あなたは起動する前にjvmメモリ空間を制限することができますが、正確な値ではありません1000または10000、スレッドのサイズも重要なことができます。また、メモリ空間を制限すると、逆の効果が生じることがあります。 –

+0

ThreadPoolを使用して、制限付きで –

+0

@BobFlannigonこれは私のコードではありません。私のマシンはそれを走らせるだけで、私が望むのは新しいスレッドを開始することを禁じることです。たとえば、誰かがスレッドを生成する場合でもクラッシュする可能性がありますが、いずれにしても実行できません。それを行う方法? – abc

答えて

0

AFAIK、制限は純粋にJVM上のOSに依存します。

そして、あなたはExecutor service

で終了し、一つ以上の非同期タスクの進行状況を追跡するFutureを生成できるメソッドを管理するためのメソッドを提供エグゼキュータそれらを監視することができます。

ExecutorService pool = Executors.newFixedThreadPool(n); 
+0

ExecutorServiceは私のコードではなく、拡張スレッドを使用することができますか?制限はこのプールからのスレッドだけですが、誰かが他のプールを作るのを妨げたり、単にスレッドを拡張することはできません。 – abc

2

コンストラクタまたは開始メソッドで目的のチェックを実行する独自のサブクラスをスレッド用に作成できます。

あなたはカスタムスレッドクラスを使用して実行されているコードを確保するために、独自のカスタムクラスローダとそのクラスローダとコードをロードする必要があり、単純に出たjava.lang.Threadクラスと手のためのすべての要求をキャッチあなたのカスタムクラス(そのコンセプトは他のクラスに拡張することもできます)を使用します。

警告:を実装すると、これは適切なことではありません。

+0

私はあまりにも投票された問題には良いアイデアだけど、それは実際に私のせいです - 私の質問はJavaの特定でした:)より多くの言語に固有のそれを使用しないだろう – abc

6

Linuxでは、このプログラムを別のユーザーとして実行し、シェルコマンドulimit -u nprocsを使用して、そのユーザーのスレッド(プロセス)数を制限することができます。制限を超えようとすると、the JVM will throw an OutOfMemoryErrorが発生します。

しかし、なぜこれをやりたいのですか?あなたは、プログラムがコンピュータのすべてのCPUリソースを消費することを心配していますか?もしそうなら、あなたはniceを使用して、下のスケジューリング優先順位でJVMを実行することを検討したい場合がありますので、他のプロセスがCPUの優先使用を取得します:

NPROCS=100 # for example 
NICENESS=13 # for example 
ulimit -u $NPROCS 
nice -n $NICENESS java ... 

niceを使用して、その方法ですべての優先順位を下げる必要がありますスレッドは、it is not clear that it does so for Linuxです。

+0

実際に私はシステムのようにSPOJを書くように試みます誰かがpthreadを使ってスレッドやデーモンを作成しようとしたときにC/C++で簡単に見つけ出すことができます(forkなど)。私は、Javaスレッドは物理スレッドと何も持っていないと思った。だからこそ、いくつかのjvmの設定について聞いています。アップが投票されました。私はcpulimitを使用します。プロセスが%で使用できる時間を設定することができます – abc

関連する問題