Ich baue eine Java-Anwendung und ich muss verfolgen, wie viele Sekunden seit dem Start des Programms vergangen sind. Ich versuche, dies mit einem Thread zu erreichen, so habe ich eine Hauptklasse, die den timeController
Thread erstellt, wartet 5 Sekunden und stoppt dann, zu Testzwecken ist das einzige, was timeController
jetzt tun soll, ist, die verstrichenen Sekunden zu drucken alle 0,5 Sekunden. Aber bedenken Sie, dass mein Endziel ist, mehrere Threads eines anderen Objekts zu haben, die die synchron verstrichenen Sekunden an timeController
fragen. Für jetzt druckt es nur die erste Calendar.SECOND
und aktualisiert diesen Wert nie, da es für 5 Sekunden vor der Unterbrechung läuft und jede halbe Sekunde aktualisiert, würde ich erwarten, etwas wie 44 44 45 45 46 46 47 47 48 48 zu sehen (vorausgesetzt, wenn es begann die Systeme Sekunden waren 44). Vielen Dank.Wie verfolgen Sie die Sekunden?
public class Main {
public static void main(String[] args) {
TimeController timeCon = TimeController.getInstance();
timeCon.start();
try {
Thread.sleep(5000);
timeCon.stop();
} catch (Exception e){
//ignore for now
}
}
}
public class TimeController implements Runnable{
private static TimeController instance = null;
private volatile Thread timeCon;
private Calendar calendarInstance = Calendar.getInstance();
private int secondsElapsed = 0;
private int incialSeconds = 0;
public int getElapsedSeconds(){
return secondsElapsed;
}
public static TimeController getInstance(){
if(instance == null){
instance = new TimeController();
}
return instance;
}
public void start(){
timeCon = new Thread(this);
timeCon.start();
}
public void stop(){
timeCon = null;
}
@Override
public void run() {
Thread thisThread = Thread.currentThread();
while (thisThread == timeCon) {
try {
Thread.sleep(500);
secondsElapsed = calendarInstance.get(Calendar.SECOND) - incialSeconds;
System.out.println(getElapsedSeconds());
} catch (Exception e){
//Ignore for now.
}
}
}
}
Eines der wichtigsten Dinge ersetzen, um zu erfahren Multi-Threading ist; ** Verwenden Sie Multithreading nur, wenn dies sinnvoll ist **. wenn Sie es nicht mit einem Thread tun können. Ansonsten fügen Sie einfach Komplexität und Fehler hinzu. –