Thread tickt nicht richtig

  • Themenstarter Themenstarter ToastBread
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

ToastBread

Gast
HI, ich lasse einen Thread starten und der soll jede Minute eine Printausgabe machen. Problem ist das er das nicht richtig macht also er verbraucht immer ein paar Millisekunden so alle 5 Minuten.

Code:
Timer timer = new Timer();	
	    Calendar cal = Calendar.getInstance ();
	    while(cal.get(Calendar.SECOND) !=0)
	    {
	    	cal = Calendar.getInstance ();
	    }
	    timer.schedule(new Taskmail(),   0, 60000 );
 
hier ein Beispiel im Eigentest
Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {

        Timer timer = new Timer();
        Calendar cal = Calendar.getInstance();
      

        final long start = System.currentTimeMillis();
        timer.schedule(new TimerTask()
            {
                public void run()
                {
                    System.out.println(" start " + (System.currentTimeMillis() - start));
                    try
                    {
                        Thread.sleep(500);
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                    System.out.println(" end   " + (System.currentTimeMillis() - start));
                }
            }, 0, 6000);
        System.out.println("go: ");
    }

}

Ausgabe:

 start 0
go: 
 end   500
 start 6000
 end   6500
 start 12000
 end   12515
 start 18000
 end   18500
 start 24000
 end   24500
 start 30015
 end   30515
 start 36015
 end   36515
 start 42015
 end   42515
 start 48015
 end   48515
 start 54015
 end   54515
 start 60015
 end   60531
 start 66015
 end   66515
 start 72015
 end   72515
 start 78031
 end   78531
 start 84047
 end   84547
 start 90047
 end   90547
 start 96047
 end   96547
 start 102047
 end   102547
 start 108047
 end   108562
 start 114047
 end   114547
 start 120047
 end   120547
 start 126062
 end   126562



mein Vorschlag: selber machen, 15-30ms Abweichung kann man bei der eh ungenauen Zeitmessung nicht verhindern,
aber zumindest danach die Zeit bis zum nächsten Zeitpunkt berechnen und dann nicht ganz so lange schlafen, damit sich der Fehler nicht aufsummiert
 
Hi ToastBread, versuch mal:

timer.scheduleAtFixedRate(new Taskmail(), 0, 60000);

Damit müsste es eigentlich gehen.
 
shad0w hat gesagt.:
Hi ToastBread, versuch mal:

timer.scheduleAtFixedRate(new Taskmail(), 0, 60000);

Damit müsste es eigentlich gehen.

Ja, Super klappt jetzt alles. Vielen Dank shad0w
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben