私はJavaアプリケーションを構築しており、プログラムの開始から何秒が経過したかを把握する必要があります。私はスレッドでこれを達成しようとしているので、私はtimeController
スレッドを作成し、メインクラスを持って、5秒間待機してから、それを停止し、テスト目的のためにtimeController
が今行うことになっていることを唯一のものは、経過秒を印刷します0.5秒ごとに。しかし、私の最終的な目標は、異なるオブジェクトの複数のスレッドに、同期方法で経過した秒数を問い合わせることです。今それが唯一の最初Calendar.SECOND
を印刷し、決してその値を更新し、それが中断する前に5秒間実行され、半秒ごとに更新しているので、私は44 44 45 45 46 46 47 47 48 48のようなものを見ることが期待される(ときと仮定するためにシステム秒を開始した44)。ありがとうございました。今の秒を記録する方法は?
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.
}
}
}
}
一つであなたのクラスを置き換えることができます。 **そうすることが理にかなっている場合にのみ、マルチスレッドを使用してください**。つまり、1つのスレッドで実行できない場合です。それ以外の場合は、複雑さとバグを追加するだけです。 –