thread, variable abfragen

Status
Nicht offen für weitere Antworten.

vodn7v

Bekanntes Mitglied
hallo,
ich habe hier einen thread laufen. im thread läuft ein counter der von 0 an einfach hochzähl.

ich möchte einfach aus einer anderen klasse auf die variable "time" zugreifen und den aktuellen counterstand abzufragen, während der counter weiter läuft. aber irgednwie krieg ich das net so ganz hin.
wenn ich eine methode schreibe die time zurückgibt dann ist sie immer 0.
wird die variable time nicht komplett überschrieben immer und müsste in der ganzen klasse verfügbar mit dem aktuellen counterstand sein ?

vielen dank



Code:
public class MachineTimer extends Thread implements Runnable  {
	
	private int time = 0;
	private boolean running = false;
	
	 public void start(){ 
		
	      if (time > 4000000){ 
	         time = 0; 
	          } 
	      running = true; 
	   } 
	public void run(){ 
		
		start();
		
		
	   while (running){ 
		 
	       sleepOneSec(); 
	
	      } 
	}
	 
	private void sleepOneSec( ){ 
	   try 
	   { 
	       Thread.sleep(1000); 
	       time++; 
	       System.out.println("Time: "+time);
	       if (time == 0 ){
	    	   running = false; 
	       }
	} 
	catch (Exception e) {} 

	}
	
}
 
S

SlaterB

Gast
du hast da dummerweise die reservierte Operation start() überschrieben,
mit der standardmäßig ein Thread gestartet wird,
damit ist alles kaputt,

so gehts:
Code:
public class MachineTimer
    extends Thread
{

    private int time = 0;
    private boolean running = false;

    public void myStart()
    {
        if (time > 4000000)
        {
            time = 0;
        }
        running = true;
    }

    public void run()
    {
        myStart();
        while (running)
        {
            sleepOneSec();
        }
    }

    private void sleepOneSec()
    {
        try
        {
            Thread.sleep(100);
            time++;
            System.out.println("Time: " + time);
            if (time == 0)
            {
                running = false;
            }
        }
        catch (Exception e)
        {
        }
    }

    /**
     * @return time
     */
    public int getTime()
    {
        return this.time;
    }

    public static void main(String[] args)
        throws Exception
    {
        MachineTimer m = new MachineTimer();
        m.start();

        Thread.sleep(400);
        System.out.println("main liest time: " + m.getTime());
        Thread.sleep(400);
        System.exit(0);
    }
}

oder auch
Code:
 public void start()
    {
        if (time > 4000000)
        {
            time = 0;
        }
        running = true;
        super.start();
    }

    public void run()
    {
        while (running)
        {
            sleepOneSec();
        }
    }
aber dann auch keinen Fall in run() nochmal start() aufrufen!
start() wird von außen zum Starten des Thread aufgerufen
 
B

bygones

Gast
vor allem warum von Thread erben UND runnable implementieren ?

edit: achja.. slater hats ja
 

vodn7v

Bekanntes Mitglied
vielen Dank schonmal fuer dir Hilfe.
aber so richtig funtkioniert das nicht. was habe ich falsch gemahcht ? bekommt immer noch "0" zurückgeliefert bei jedem aufruf.

Code:
public class MachineTimer extends Thread implements Runnable  {
	
	private int time = 0;
	private boolean running = false;
	int diffTime = 0;
	int mach_time = 0;
	
	public int getTime()
	{
		return this.time;
	} 

	 public void myStart() 
	    { 
	        if (time > 4000000){ 
	            time = 0; 
	        } 
	        running = true; 
	    } 

	    public void run() 
	    { 
	        myStart(); 
	        while (running) 
	        { 
	            sleepOneSec(); 
	        } 
	    } 

	
	private void sleepOneSec( ){ 
		
	   try 
	   { 
	       Thread.sleep(1000); 
	       time++;       
	       System.out.println("Time: "+time);
	       if (time == 0 ){
	    	   running = false; 
	       }
	} 
	catch (Exception e) {} 

	}
}

andere klasse:

Code:
.
.
.
.
MachineTimer m = new MachineTimer();
  
		int timer = m.getTime();
		
		System.out.println("Zeit: "+timer);
.
.
.

vielen dank !!
 
S

SlaterB

Gast
schau dir doch mein Beispiel genau an..
da warte ich erst eine gewisse Zeit, damit der Thread Zeit hat, time zu erhöhen

wenn er 1000ms braucht, dann warte mindestens 1000ms,
bei den allgemeinen Ungenauigkeiten am besten mindestens 1100ms
 

vodn7v

Bekanntes Mitglied
ok das macht sinn :)

habe es jetzt so :

Code:
....
		MachineTimer m = new MachineTimer();
		
		    Thread.sleep(1100); 
		    int timer = m.getTime();

......

er kriegt aber immer noch 0 zurück.

ne andere frage am rande. woher weiss das programm wenn ich Thread.sleep sage welchen thread er pausieren soll.
ich habe noch einen 2ten thread laufen.
woher weiss er das er den thread aus MachineTimer nehmen soll ?
also das macht er mit dem pausieren schon. aber wieso ist der so schlau ?? :)
 

anfänger15

Bekanntes Mitglied
wenn du MachineTime schlafen legen willst ruf einfach

Code:
      try{
          m.sleep(1100); 
} catch (InterruptedException e){
System.err.println(e);
}
auf
 
S

SlaterB

Gast
quatsch,
jeder Thread kann nur sich selber schlafen legen, das ist ja auch eine statische Operation

> woher weiss das programm wenn ich Thread.sleep sage welchen thread er pausieren soll
wie gesagt, man selber ist ein Thread, also legt man sich selber schlafen,

dass du als Programmierer genau überblicken kannst, welcher Thread gerade welchen Code ausführt, ist natürlich ein ganz anderes Problem,

-----

zu deinem Code nochmal:
hast du auch irgendwo
m.start()?
erscheinen die Ausgaben
System.out.println("Time: "+time);
alle Sekunden?

nochmal: siehe meine Programm, das läuft..
 

vodn7v

Bekanntes Mitglied
SlaterB hat gesagt.:
zu deinem Code nochmal:
hast du auch irgendwo
m.start()?

erscheinen die Ausgaben
System.out.println("Time: "+time);
alle Sekunden?

nochmal: siehe meine Programm, das läuft..


also ich starte den thread in einer anderen klasse die sozusagen die "main" klasse darstellt.
die ausgaben erscheinen sekündlich. auch das schlafen legen des threads funktioniert.


--

aber nicht das auslesen der time variable.
habe deinen code mal 1zu1 kopert. wenn ich die klasse starte funktioniert es auch. aber nur wenn der thread auch in dieser klasse gestartet wird. und dann nach ablauf der ms dann abfragt wie der aktuelle status ist.

z.B.

Thread start --> thread.slee(1100) dann wird der thread nach 1100ms abgefragt nachdem er gestartet wurde.

ich möchte ihn aber mittendrin abfragen. halt mit aufruf einer funktion.

wenn der timer bei 34543 steht will ich diese zahl auslesen.

danke dir !!
 

vodn7v

Bekanntes Mitglied
hmm.. ja ..versteckt ^^


also eig nur die aussage, dass es so wie du mir gezeigt hast nicht funktioniert.
und ich nicht weiss wieso er nicht den "richtigen" counter-wert zurückgibt sondern nur die zeit die ich in thread.sleep angebe.

da fragt er den counter dann nämlich ab. und nich dann wenn ich die methode starte. und der counter vllt schon bei 1mio ist.


danke dir
 
S

SlaterB

Gast
wer fragt wen wann warum wo wieso ab?
wenn du irgendwas von deinem Programm erzählst bekomme ich davon nicht viel mit,

einfach ein Programm posten so ähnlich wie meins und alles ist sonnenklar

selbst dann gilt aber immer noch:
war da eine Frage dabei?

was passiert, was soll stattdessen passieren
 

vodn7v

Bekanntes Mitglied
alles klar.. dann versuch ichs mal ausführlich :)

also ich habe eine art mainklasse in der ich ganz zu anfang des programms mehere threads starte. unter anderem auch den hier :

Code:
		Thread  t = new Thread(new MachineTimer());	
		t.start();

das ganze passiert nur 1x und nur beim starten des programms.
von da an läuft der counter.

ein 2ter thread empfängt lognachrichten die dann bearbeitet werden.
falls eine bestimmte nachricht ankommt wird dieser teil gestartet.

Code:
   if(level.equals("<199>")){
		   level = "Machine-Online";
		  System.out.println("Maschine: "+SsenderId+","+Stype+" online");
		  
		MachineTimer m = new MachineTimer();
		
		    Thread.sleep(1900); 
		    int timer = m.getTime();

		System.out.println("Zeit: "+m.getTime());

		try {SqlData.setMachineOnline(SsenderId,Status,timer);} catch (SQLException e) {e.printStackTrace();}
		 

	   }


ich möchhte dann dien count aus der MachineTimer klasse haben um sie in meiner datenbank zu speichern.

jedes mal wenn eine nachricht ankommt wir dann der count mit daten gespeichert.
ist die differenz des aktuellen counts und dem count in der db größer 30 wird ein status geändert.

dafuer brauch ich das ganze :)

ich hoffe das es jetzt etwas verständlicher ist und du mir sagen kannst wie ich in etwa an diesen countwert komme.

im moment ist es halt so wenn ich erst den timer starte.. und erst nach beliebiger zeit den count abfrage dieser 0 ist.
in deinem beispiel wir er ja gestartet und direkt danach abgefragt was auch funktioniert.
aber anders geht es irgednwie nicht.


danke dir !!
 
G

Guest

Gast
vodn7v hat gesagt.:
Code:
   if(level.equals("<199>")){
		   level = "Machine-Online";
		  System.out.println("Maschine: "+SsenderId+","+Stype+" online");
		  
		MachineTimer m = new MachineTimer();
		
		    Thread.sleep(1900); 
		    int timer = m.getTime();

		System.out.println("Zeit: "+m.getTime());

		try {SqlData.setMachineOnline(SsenderId,Status,timer);} catch (SQLException e) {e.printStackTrace();}
		 

	   }

Hallo hier wird ja eine neue Instanz von MachineTimer erzeugt. Die hat erstens mit der alten Instanz gar nichts zu tun.
Und zweitens wird diese auch nicht gestartet. Ergo liefert m.getTime() immer 0.
 

vodn7v

Bekanntes Mitglied
jau hab ich auch grad bemerkt. dummer fehler sorry.
aber es läuft jetzt. also kome an die variable dran :))

vielen dank an euch alle !!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
S Zugriff auf Variable in anderem Thread Java Basics - Anfänger-Themen 6
J Variable von Thread1 in Thread 2? Java Basics - Anfänger-Themen 10
L Variable an Thread übergeben Java Basics - Anfänger-Themen 5
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
K Exception in thread "main" Java Basics - Anfänger-Themen 7
L Thread-Frage Java Basics - Anfänger-Themen 2
E Was ist ein idle-thread? Java Basics - Anfänger-Themen 1
D Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 8
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
F Thread Koordination (Vorteile/Nachteile) Java Basics - Anfänger-Themen 0
O Thread aus dem Thread stoppen Java Basics - Anfänger-Themen 6
O Swingworker/Thread Java Basics - Anfänger-Themen 3
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
S musik in eigenem thread Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben