Variablen übergabe in Threads

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variablen übergabe in Threads

    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?
    Wenn du zum weibe gehst nimm die Peitsche mit (Nietzsche)
  • 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
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • 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
    Wenn du zum weibe gehst nimm die Peitsche mit (Nietzsche)
  • 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:

    Quellcode

    1. public class ThreadEx{
    2. // shared variable
    3. private String contant_var;
    4. public ThreadEx() {
    5. new Thread(new ThreadWriter()).start();
    6. new Thread(new ThreadReader()).start();
    7. }
    8. // method to set contant
    9. public synchronized void setContant() {
    10. contant_var = "verändert.";
    11. }
    12. // method to get contant
    13. public synchronized String getContant() {
    14. // read contant
    15. String tmp_con = contant_var;
    16. // set contant to null after read
    17. contant_var = null;
    18. return tmp_con;
    19. }
    20. private class ThreadWriter implements Runnable {
    21. public void run() {
    22. while(true) {
    23. // sleep for preformance reason
    24. try {
    25. Thread.sleep(2000);
    26. } catch (InterruptedException e) {
    27. e.printStackTrace();
    28. }
    29. // check for new contant
    30. String tmp_Co = ThreadEx.this.getContant();
    31. if(tmp_Co != null)
    32. System.out.println("something changed");
    33. else
    34. System.out.println("nothing changed.");
    35. }
    36. }
    37. }
    38. private class ThreadReader implements Runnable {
    39. public void run() {
    40. while(true) {
    41. // sleep for preformance reason
    42. try {
    43. Thread.sleep(10000);
    44. } catch (InterruptedException e) {
    45. e.printStackTrace();
    46. }
    47. // set new contant
    48. ThreadEx.this.setContant();
    49. }
    50. }
    51. }
    52. }
    Alles anzeigen


    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
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • 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.
    :danke:
    Wenn du zum weibe gehst nimm die Peitsche mit (Nietzsche)