Ich bin neu in Java und versuche das hier. Ich habe eine Methode, die ich parallel ausführen möchte. Ich wünsche mir, dass 10 Threads die Methode aufrufen und ihre Ergebnisse erhalten.
Ich verwende dafür Callable
und Executors
. Ich erstelle den Thread-Pool wie folgt:
ExecutorService executor = Executors.newFixedThreadPool(10);
und wenn ich das mache:
executor.invokeAll(taskList);
wird nur ein Thread aus dem Pool genommen. Und ich erhalte nur folgendes gedruckt:
Der aktuelle Thread lautet pool-1-thread-1
Aber ich wünsche mir, dass es 10 ähnliche println-Anweisungen gibt.
Hier ist der vollständige Code:
import java.util.concurrent.Callable;
import java.util.List;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.Future;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
public class Parallel
{
public static void main(String args[])
{
Learning l = new Learning();
l.message = "1st Object";
l.testThread();
}
}
//diese Klasse handhabt die Threads
class Learning
{
public String message;
public void setMessage(String message)
{
this.message = message;
}
//enthält den Code, in dem
public void testThread()
{
//Erstelle ein Callable für jede Methode
Callable callable1 = new Callable()
{
@Override
public String call() throws Exception
{
System.out.println("Der aktuelle Thread ist " + Thread.currentThread().getName());
return method1();
// return null;
}
};
//Füge der Liste hinzu
List> taskList = new ArrayList>();
taskList.add(callable1);
//erstelle einen Pool-Executor mit 10 Threads
ExecutorService executor = Executors.newFixedThreadPool(10);
try
{
List> futureList = executor.invokeAll(taskList);
}
catch (InterruptedException ie)
{
}
}
//füge deinen Code hier ein!
private String method1()
{
return Thread.currentThread().getName();
}
}
Fehtl mir etwas hier?