CPU Auslastung ungewollt auf 100%

Status
Nicht offen für weitere Antworten.

duddel123

Aktives Mitglied
Hallo zusammen,

ich habe mir eine Datums,Zeit Klasse gebastelt.
Ich kann ueber get() auf die jeweiligen Werte zugreifen!
Leider macht mir run() sorgen, da ich dort eine while(true) gebaut habe,
die leider 100% CPU saugt. Ich hab da wohl nen Gedanken Fehler, ist die run() eines
Threads nicht selbst ablaufend und zwar stetig???
Hier der Code, hat jemand ne Idee???


gruss + dank im voraus...


Code:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

/*
 * Created on 18.10.2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author 
 * @version 0.1
 * 
 * Die Klasse stellt alle Zeitstempel zur Verfuegung.
 * Auf die einzelnen Tage, Minute etc. kann über get() zugegriefen werden.
 * Sie ist ein Thread und wird einmalig in dem Konstruktor angestossen,
 * danach laeuft Sie in der run() als while- Schleife. 
 */
public class PointofTime extends Thread{

		//	 Variablen für die Zeit	
	private static int Stunde, Minute, Sekunde, Millisekunde;
	private static int Jahr,Monat,Woche,Tag;
	private static SimpleDateFormat Datum1;
	private static GregorianCalendar cal;

	
	/** 
	 * Hier wird der Thread gestartet.
	 *
	 */
	public PointofTime(){
		cal = new GregorianCalendar();
		Datum1 = new SimpleDateFormat();
		start();

	}
	
	/**
	 * Es wird in einer Endlosschleife staendig die time() aufgerufen.
	 */
	public void run(){
		
		while(true){
		time();
		}
		
	}
	
	/**
	 * Sie Liest die aktuelle Computerzeit aus und speichert die Werte.
	 * Der Zugriff erfolgt ueber get().
	 *
	 */
	void time(){
		
		Stunde = cal.get(Calendar.HOUR_OF_DAY);
		Minute = cal.get(Calendar.MINUTE);
		Sekunde = cal.get(Calendar.SECOND);
		Millisekunde = cal.get(Calendar.MILLISECOND);
		
		Jahr = cal.get(Calendar.YEAR);
		Monat = cal.get(Calendar.MONTH);
		Woche = cal.get(Calendar.WEEK_OF_YEAR);
		Tag = cal.get(Calendar.DAY_OF_MONTH);
		Datum1.applyPattern("yyyyMMddHHmss");
		
	}
	
	/** Sie gibt die aktuelle Stunde aus.
	 * 
	 * @return Stunde
	 */
	public static int getStunde(){
		return Stunde;
		
	}
	/** Sie gibt die aktuelle Minute aus.
	 * 
	 * @return Minute
	 */
	public static int getMinute(){
		return Minute;
	}
	/** Sie gibt die aktuelle Sekunde aus.
	 * 
	 * @return Sekunde
	 */
	public static int getSekunde(){
		return Sekunde;
	}
	/** Sie gibt die aktuelle Millisekunde aus.
	 * 
	 * @return Millisekunde
	 */
	public static int getMillisekunde(){
		return Millisekunde;
	}
	/** Sie gibt das aktuelle Jahr aus.
	 * 
	 * @return Jahr
	 */
	public static int getJahr(){
		return Jahr;
	}
	/** Sie gibt den aktuellen Monat aus.
	 * 
	 * @return Monat
	 */
	public static int getMonat(){
		return Monat;
	}
	/** Sie gibt die aktuelle Woche aus.
	 * 
	 * @return Woche
	 */
	public static int getWoche(){
		return Woche;
	}
	/** Sie gibt den aktuellen Tag aus.
	 * 
	 * @return Tag
	 */
	public static int getTag(){
		return Tag;
	}
	/** Sie gibt das aktuelle Datum1 aus.
	 *  In der Form "yyyyMMddHHmss"
	 * 
	 * @return Datum1
	 */
	public static SimpleDateFormat getDatum1(){
		return Datum1;
	}
	

}
 

Heiko

Bekanntes Mitglied
Deine While-Schleife ist endlos, da du die Bedingung immer auf "true" gesetzt hast.

Daher kommen die 100% CPU Auslastung
 

duddel123

Aktives Mitglied
Die Idee hatte ich auch schon!
Ist das nicht ein Problem für die genaue Zeit- Abfrage, wenn man den Thread für (200) schlafen legt.
 

thE_29

Top Contributor
ein sleep 200 schläft 200 millisekunden, glaube kaum das du die uhrzeit so genau benötigst ;)
 

dotlens

Top Contributor
wieso fragst du die zeit eigentlich nicht erst ab, wenn du sie benötigst? also wenn eine deiner methoden aufgerufen wird?

nein wäre kein problem, da du ja die zeit nicht selbst berechnest, sondern abfragst....
 

duddel123

Aktives Mitglied
dotlens hat gesagt.:
wieso fragst du die zeit eigentlich nicht erst ab, wenn du sie benötigst? also wenn eine deiner methoden aufgerufen wird?

:D

das war es, stimmt kann man natürlich auch so machen!
Jetzt klappt besser


besten dank noch mal...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben