Ola, estou com um problema com as threads, necessito que crie um determinado numeros de threads apartir do que o usuario passar pelo prompt de comando, porem as vezes acontece uns erros que ja pesquisei em todos os cantos e nao consigo resolver! segue meu codigo
public class Work implements Runnable {
static int aClass = 0;
static int bClass = 0;
static int cClass = 0;
static int dClass = 0;
static int ipStop = 0;
public Work(int ipStart, int ipStopp) {
aClass = ipStart;
ipStop = ipStopp;
}
public void run() {
String host = aClass+"."+bClass+"."+cClass+"."+dClass;
if (aClass <= ipStop) {
dClass++;
if (dClass == 256) {
cClass++;
dClass = 0;
}
if (cClass == 255) {
bClass++;
cClass = 0;
}
if (bClass == 255) {
aClass++;
}
}
System.out.println(host);
Thread.yield();
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
System.out.println("Erro Thread");
}
}
}
Segue minha classe teste:
import java.util.concurrent.*;
public class Teste {
public static void main(String args[]) {
int numThread = Integer.parseInt(args[0]);
ExecutorService tpes = Executors.newFixedThreadPool(numThread);
int a = 255 * 255 * 255;
for (int i = 0; i < a; i++) {
tpes.execute(new Work(60,61)); // 60 e 61 seria entre 60.0.0.0 ate 61.0.0.0
}
tpes.shutdown();
}
}
Acontece que as vezes surgem esse erro, alias varias vezes! Normalmente quando coloco por exemplo 100 threads, ou entao 10, 50 nao consigo entender o erro. No erro abaixo utilizei o numero de threads de 50
60.0.0.152
Exception in thread "pool-1-thread-50" java.lang.OutOfMemoryError: Java heap space at Work.run(Work.java:19)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
60.0.0.153
60.0.0.154
60.0.0.155
60.0.0.156
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
60.0.0.157