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);
}
}
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);
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 103493
Url: https://administrator.de/forum/geplante-ereignisse-mit-timerthreads-103493.html
Ausgedruckt am: 23.04.2025 um 15:04 Uhr
2 Kommentare
Neuester Kommentar
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
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