Hallo,
ich habe zwei Threads, die zu einer bestimmten Zeit etwas machen sollen.
Das sollen sie aber nur machen, wenn eine Verbindung zum Internet besteht, da sie etwas downloaden sollen. Besteht die Internetverbindung nicht, aber die Zeit ist trotzdem erreicht soll der Thread so lange in die "Warteschleife" bis eine Internetverbindung besteht und dann tun, was er tun soll.
Währenddessen kann es passieren, dass Thread 2 ebenfalls seine Zeit erreicht und mit ihm das selbe geschieht.
Das klappt auch soweit ganz gut, jedoch wird die While-Schleife alle 30 Sekunden wiederholt, damit sich die Zeit aktualisiert um ggf. einen Thread auszuführen.
Da sich nach 30 Sekunden die Minute nicht geändert hat wird aber der selbe schon laufende Thread ein zweites mal ausgeführt, sodass zwei mal "Tu etwas!" und ggf. auch zwei mal "Tu etwas anderes!" in der Console ausgegeben wird, sobald eine Internetverbindung hergestellt wurde.
Gibt es eine Möglichkeit zu verhindern, dass der Thread ein zweites mal gestartet wird während er noch läuft, ohne die Aktualisierung der Zeit zu stoppen?
Hier mein Code, der ausgeführt im "Idealfall" beide Texte zwei mal ausgibt:
Vielen Dank schon im Voraus,
Erik
ich habe zwei Threads, die zu einer bestimmten Zeit etwas machen sollen.
Das sollen sie aber nur machen, wenn eine Verbindung zum Internet besteht, da sie etwas downloaden sollen. Besteht die Internetverbindung nicht, aber die Zeit ist trotzdem erreicht soll der Thread so lange in die "Warteschleife" bis eine Internetverbindung besteht und dann tun, was er tun soll.
Währenddessen kann es passieren, dass Thread 2 ebenfalls seine Zeit erreicht und mit ihm das selbe geschieht.
Das klappt auch soweit ganz gut, jedoch wird die While-Schleife alle 30 Sekunden wiederholt, damit sich die Zeit aktualisiert um ggf. einen Thread auszuführen.
Da sich nach 30 Sekunden die Minute nicht geändert hat wird aber der selbe schon laufende Thread ein zweites mal ausgeführt, sodass zwei mal "Tu etwas!" und ggf. auch zwei mal "Tu etwas anderes!" in der Console ausgegeben wird, sobald eine Internetverbindung hergestellt wurde.
Gibt es eine Möglichkeit zu verhindern, dass der Thread ein zweites mal gestartet wird während er noch läuft, ohne die Aktualisierung der Zeit zu stoppen?
Hier mein Code, der ausgeführt im "Idealfall" beide Texte zwei mal ausgibt:
Java:
import java.io.IOException;
import java.util.Calendar;
public class Connection {
public static void main(String[] args) throws IOException {
while (true) {
try {
int minute = 0;
Calendar rightNow = Calendar.getInstance();
minute = rightNow.get(Calendar.MINUTE);
final int Minuten = minute;
Runnable Test1 = new Runnable() {
@Override
public void run() {
if (Minuten == 55) {
while (Internet() == false) {
}
System.out.println("Du hast Internet");
}
}
};
Runnable Test2 = new Runnable() {
@Override
public void run() {
if (Minuten == 56) {
while (Internet() == false) {
}
System.out.println("Du hast Internet!");
}
}
};
Thread Nummer1 = new Thread(Test1);
Thread Nummer2 = new Thread(Test2);
Nummer1.start();
Nummer2.start();
Thread.sleep(30000);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static boolean Internet() {
try {
java.net.InetAddress.getByName("google.de");
return true;
} catch (java.net.UnknownHostException e) {
return false;
}
}
}
Vielen Dank schon im Voraus,
Erik