Variablen übergabe in Threads

Status
Für weitere Antworten geschlossen.

peter9876

Registered +
Registriert
Aug. 2006
Beiträge
506
Ich hab ein prog mit 2 verschiedenen threads (thread1,thread2) die beide paralell laufen. an einem bestimmten punkt bräuchte jezt aber thread 1 eine kontrollsumme von thread 2 und umgekehrt ist es in java irgendwie möglich das sich diese zwei threads untereinander austauschen?
 
hi,

es waere schoen, wenn du uns deinen code zeigen koenntest. dann haben es andere leute leichter sich unter deinem problem etwas vorzustellen und koennen dir schneller ideen und denkanstoesse schreiben.

fuer dein problem wuerden mir spontan 2 lsgs. wege einfallen. zum einen koenntest du den einen thread schlafen legen und der andere thread berechnet die pruefsumme und speichert sie in eine variable. wenn er das getan hat dann kannst du mit notify(), den anderen thread wecken und er holt sich daraufhin den wert aus der variable und verarbeitet sie weiter.

meine 2te lsg. wuerde vorsehen das dein thread 1 die pruefsumme erstellt und in eine variable speichert. der thread 2 laeuft quasi-parallel zum ersten und pollt diese variable in periodischen abstaenden um zu pruefen ob sich der inhalt geaendert hat.


gruss tuney
 
Deine zweite Lösung wäre genau das richtige für mein problem (kann den code leider net posten da er auf nem anderen rechner is an den ich grad net rankomm). Die beiden threads sollen paralell laufen und dann soll einer eine variable die der andere zuvor gefüllt hat abfragen. Hättest du mir da ein simples beispiel wie sowas in der praxis umgesezt wird? Wäre sehr nett
Gruß
peter
 
hi,

beide threads, sprich threadwriter und -reader, kommunizieren ueber die variable contant_var. beide methoden set- und getContent sollten synchronized sein, aufgrund der atomaritaet. hier waere mein vorschlag:

Code:
public class ThreadEx{

// shared variable
private String contant_var;

public ThreadEx() { 
new Thread(new ThreadWriter()).start();
new Thread(new ThreadReader()).start(); 
}

// method to set contant
public synchronized void setContant() {
contant_var = "verändert.";
}

// method to get contant
public synchronized String getContant() {
// read contant
String tmp_con = contant_var;

// set contant to null after read
contant_var = null;
return tmp_con;
} 

private class ThreadWriter implements Runnable {
public void run() {
while(true) {

// sleep for preformance reason
try {
Thread.sleep(2000); 
} catch (InterruptedException e) {
e.printStackTrace();
}

// check for new contant
String tmp_Co = ThreadEx.this.getContant(); 

if(tmp_Co != null) 
System.out.println("something changed");
else 
System.out.println("nothing changed.");
} 
}
}

private class ThreadReader implements Runnable {
public void run() {
while(true) {
// sleep for preformance reason
try {
Thread.sleep(10000); 
} catch (InterruptedException e) {
e.printStackTrace();
}
// set new contant
ThreadEx.this.setContant(); 
}
}
}
}

moegliche Ausgabe:

nothing changed.
nothing changed.
nothing changed.
nothing changed.
nothing changed.
something changed
nothing changed.
nothing changed.
nothing changed.
nothing changed.
something changed
nothing changed.

ich hoffe ich konnte dir etwas helfen.
gruss tuney
 
Ah ok vielen dank jezt hab ichs kapiert ich wusste biseher nicht das es so einfach ist auf methoden éiner klasse zuzugreifen ohne eine eigene instanz davon zu erstellen.
Dank tuney kann das Thema geclosed werden.
:thx:
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten