Multithreading-ExecutorCompletionService

anfänger-cranach

Grünschnabel
Hallo,
ich muss eine Reihe von geplanten Ereignissen ausführen(die befinden sich in einer Access-tabelle). Nach jeder Ausführung der einzelnen Ereignisse muß ich dafür sorgen, dass der jeweilige Name ausgegeben wird.
Habe bereits eine Klasse "ereignisse ", die das Interface Callable<String> inplemetiert. In der call() methode wird der Ereignisname ausgegeben.
Ich würde für die Ausgabe das Interface ExecutorCompletionService benutzen aber weiß nicht, wie ich es hier einbauen soll. Ich poste mal meine main-Klasse.
Danke schonmal für eure Antworten

import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.concurrent.*;
import java. text . SimpleDateFormat ;
import java.util.*;

public class Test {

static Connection con;
static ResultSet r;
static Statement stmt;
static String drv = "sun.jdbc.odbc.JdbcOdbcDriver";
static String url = "jdbc:odbc:herhangibirsey";
public static ArrayList<Callable<String>> callables=new ArrayList<Callable<String>>();
public static ScheduledThreadPoolExecutor executor=new ScheduledThreadPoolExecutor(10);
public static ArrayList<ScheduledFuture<String>> futures=new ArrayList<ScheduledFuture<String>>();
public static ExecutorCompletionService service=new ExecutorCompletionService(executor);
public static String resultat="";

public static void main(String[] args)

{
try{
Class.forName(drv);
con=DriverManager.getConnection("jdbc:odbc:MS Access Database");
stmt=con.createStatement();}
catch(Exception ex){
ex.printStackTrace();}

try{
r=stmt.executeQuery("Select * "+"From Ereignisliste");
int i=0;
while(r.next()){
Date time=r.getTimestamp(1);
int priorität=Integer.parseInt(r.getString("Priorität"));
ereignisse ereignis=new ereignisse(i,r.getString(3),time,priorität);
callables.add (ereignis);
futures.add(executor.schedule((callables.get(i)),ereignis.berechneverzögerung(),TimeUnit.MILLISECONDS));

i++;}
executor.shutdown();
service.submit(callables.get(i));
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
 
Zurück