cranach
Goto Top

Geplante Ereignisse mit Timerthreads

Wie setze ich Priorität von Timertask

Hallo,
ich habe eine Tabelle mit den Spalten Veranstaltung, Datum, Uhrzeit und Priorität.
Mein Java-Programm muß zu den dazugehörigen Datum und Uhrzeiten den Namen der Veranstaltung ausgeben.
Ich habe schon sehr viel über Threads gelesen aber sehr weit bin ich nicht gekommen. Ich weiss nicht mal, ob die Idee, das ganze mit Timern zu lösen, richtig ist. Nun habe ich das Problem mit den Prioritäten. Ich kann für die Timer keine Prioritäten setzen. Muß ich etwa das Programm umgestalten und eine Klasse Timer die Schnittstelle Runnable implementieren lassen?
Im Moment sieht mein Programm so aus.
Bin dankbar für jeden Verbesserungsvorschlag

import java.sql.*;
import java. util . Date ;
import java. util . Timer ;
import java. util . TimerTask ;

class Task extends TimerTask implements Runnable
{
static Connection con;
static ResultSet r;
static Statement stmt;
static String drv = "sun.jdbc.odbc.JdbcOdbcDriver";
static String url = "jdbc:odbc:herhangibirsey";
static Timer time=new Timer[10];
static TimerTask task=new TimerTask[10];
static Thread thread=new Thread[10];
static String ereignis;

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()){
time[i] = new Timer();
task[i] = new Task ( ) ;
thread[i] =new Thread(task[i]);
Date datum=r.getDate(1);
ereignis=r.getString("Ereignis");
int priorität=Integer.parseInt(r.getString("Priorität"));
thread[i].setPriority(priorität);
time[i].schedule(task[i],datum);
i++;

}
}
catch(Exception ex){
ex.printStackTrace();
}
}

public void run(){

System.out.println(ereignis);
}
}

Content-Key: 103493

Url: https://administrator.de/contentid/103493

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: filippg
filippg 07.12.2008 um 20:00:53 Uhr
Goto Top
Hallo,

warum willst du denn für jedes Ereignis einen eigenen Timer erstellen?
Gängig sind m.E. nach zwei Methoden:
1. Es gibt einene Timer, der zu Beginn jeder Minute ausgeführt wird, und dann checkt, ob es für diese Minute ein Ereignis gibt - sehr einfach zu implementieren.
2. Beim Start wird der Timer mit dem ersten Ereignis initialisiert. Wenn er das ausgeführt hat wird geschaut, wann das nächste Ereignis ist, und der Timer wird auf dieses Ereignis gesetzt. Schon etwas schwieriger zu implementieren, aber sicher die ressourcenfreundlichste Alternative.

1. hat übrigens den Vorteil, dass du zur Laufzeit jederzeit Änderungen an den Terminen vornehmen kannst, ohne bestehende Timer anpassen zu müssen oder neue zu erzeugen. Bei 2. müsste dazu nur geprüft werden, ob sich das nächste Ereignis geändert hat, bei der von dir angestrebten Implementierung ist es kaum möglich ohne alle Timer neu zu erstellen.

Gruß

Filipp
Mitglied: cranach
cranach 07.12.2008 um 21:27:40 Uhr
Goto Top
danke erstmal.

die erste Lösung könnte ich meistern. Nur wo erfahre ich mehr über tImer?In Büchern wird nur nebenbei was über Timer erzählt. HAbe ich wo möglich bei den scheduleXXX methoden die passende Methode übersehen? Dem Timer muß ich tasks als parameter übergeben.Kann ich den Tasks Prioritäten vergeben?
Gruß