Hi,
wenn ich einen
anlege
und dann pool.execute(new WorkerThread()); sage was passiert dann?
1a) Wird nur eine Instanz des WorkerThread() gestartet?
1b) Oder muss ich um rei WorkerThreads im Pool zu besitzen, drei Mal hintereinander pool.execute(new WorkerThread()) aufrufen?
2) Oder werden beliebig viele WorkerThreads gestartet, wie viele entscheidet der Pool.
Eine andere Frage in dem Zusammenhang:
Eine Klasse "PoolManager", die einen Thread startet bzw. einen Pool wie oben gesagt, hat eine start() Methode. Damit soll der Pool gestartet werden. Damit der Pool auch lange genug laufen kann, hab ich in die start() Methode eine Schleife eingebaut. Wenn ich die Klasse starte (mit JUnit), dann geht die CPU Load sofort auf 100% .
WorkerThread() selbst ist eine Inner-Class des PoolManagers. Die WorkerThreads pollen eine LinkedBlockingQueue . Die Queue ist leer als was kann die 100% Load machen?
wenn ich einen
Java:
ExecutorService pool = Executors.newCachedThreadPool()
und dann pool.execute(new WorkerThread()); sage was passiert dann?
1a) Wird nur eine Instanz des WorkerThread() gestartet?
1b) Oder muss ich um rei WorkerThreads im Pool zu besitzen, drei Mal hintereinander pool.execute(new WorkerThread()) aufrufen?
2) Oder werden beliebig viele WorkerThreads gestartet, wie viele entscheidet der Pool.
Eine andere Frage in dem Zusammenhang:
Eine Klasse "PoolManager", die einen Thread startet bzw. einen Pool wie oben gesagt, hat eine start() Methode. Damit soll der Pool gestartet werden. Damit der Pool auch lange genug laufen kann, hab ich in die start() Methode eine Schleife eingebaut. Wenn ich die Klasse starte (mit JUnit), dann geht die CPU Load sofort auf 100% .
Java:
/**
*
*/
public void startPool() {
try {
pool.execute(new WorkerThread());
pool.execute(new WorkerThread());
[B]
for(;;) {
}[/B]
} catch (Exception e) {
shutdown();
throw new RuntimeException(e);
}
}
WorkerThread() selbst ist eine Inner-Class des PoolManagers. Die WorkerThreads pollen eine LinkedBlockingQueue . Die Queue ist leer als was kann die 100% Load machen?
Java:
private class WorkerThread implements Runnable {
private volatile boolean shouldRun = true;
WorkerThread() {
log.debug("creating worker.");
}
public void run() {
while (shouldRun) {
try {
MessageTask task = poll(5, MILLISECONDS);
if (task == null )
continue;
task.executeTask();
System.out.println("executed");
} catch (Exception e) {
shouldRun = false;
throw new RuntimeException(e);
}
}
}
}