1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Threads Frage

  • Blackivory
  • 4. April 2005 um 22:45
  • Unerledigt
  • Blackivory
    3
    Blackivory
    Mitglied
    Punkte
    90
    Beiträge
    13
    • 4. April 2005 um 22:45
    • #1

    Hi!

    Ich hätte da eine Frage zu Threads, da ich leider nirgendwo eine Antwort gefunden habe, habe ich gehofft, ihr könnt mir da weiterhelfen.

    Es geht um einen Thread, der die "Rundenzeiten" eines Rennfahrer berechnet

    Code
    public class Rennfahrer implements Runnable {
    private int x = 0;
    Rennfahrer()
    {
    new Thread( this ).start();
    }
    public void run(){
    for(int i = 0; i <=200; i++){
    x = x + (int)(Math.random() * 6);
    try{
    Thread.sleep(1);
    }
    catch(Exception e){
    }
    }
    }
    Alles anzeigen


    In der Hautklasse GP, werden nun die 3 RennfahrerThreads gestartet

    Code
    public class GP {
    public static void main(String[] args) {
    Thread Schuhmacher = new Thread (new Rennfahrer());
    Thread Trulli = new Thread (new Rennfahrer());
    Thread Alonso = new Thread (new Rennfahrer());
    }
    }


    Mein Problem ist nun, dass ich auf die Variable x, wo die Rundenzeit gespeichert ist zugreifen möchte, um sie in eine neue Variable zu speichern.

    Die Frage ist nun, ob das so, wie ich das vorhabe überhaupt möglich ist.

    Alternativ habe ich es geschafft, wenn ich die 3 Rennfahrer in eigene Klassen mit eigenen Thread packe, diese dann von der Hauptklasse GP ableite und die Rundenzeiten durch den Super Befehl in neue Variable speichere. Das scheint mir aber als keine schöne Lösung bzw. habe ich überhaupt andere Möglichkeiten?

  • bimbo
    15
    bimbo
    Mitglied
    Reaktionen
    15
    Punkte
    2.320
    Beiträge
    390
    • 4. April 2005 um 23:06
    • #2

    solang dass int x als provate deklariert ist, geht da leider net viel.
    also würd ich eine methode "gettime() schrieben, die einfach das x als return wert hat. ansonsten dürfet es da aber kein problem geben so wie ich das seh.

    LVA Erfahrungsberichte: http://vowi.fsinf.at/

  • Blackivory
    3
    Blackivory
    Mitglied
    Punkte
    90
    Beiträge
    13
    • 4. April 2005 um 23:13
    • #3

    Ja, mit einer zusätzlichen Methode hatte ich es auch schon probiert, aber
    das Problem, dass ich dann hatte ->Wie greife ich dann auf die Methode zu?

    Weil mit z.B. mit SchuhmacherZeit = Schuhmacher.gettime() kommt ne Fehlermeldung, dazu müßte ich ja erst ein Objekt Schuhmacher erstellen.

  • Sicka
    5
    Sicka
    Mitglied
    Punkte
    240
    Beiträge
    34
    • 5. April 2005 um 08:06
    • #4

    Du könntest den Rennfahrer-Objekten Namen geben.
    z.B.:

    Code
    Rennfahrer fahrer1=new Rennfahrer();
    Thread schuhmacher=new Thread(fahrer1);

    mit fahrer1.getTime() kannst du dann zugreifen.

    Mit schuhmacher.getTime() greifst du ja auf das Thread-Objekt mit Namen Schuhmacher zu, dieses Objekt hat aber keine getTime()-Methode, sondern das Rennfahrer-Objekt.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 5. April 2005 um 08:56
    • #5
    Java
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
    
    /*
     * Created on 05.04.2005
     * 
     * @author Benjamin Ferrari
     */
    
    
    /**
     * @author ferrari
     * 
     * TODO To change the template for this generated type comment go to Window -
     * Preferences - Java - Code Style - Code Templates
     */
    public class GP {
    
    
      private List<Thread> threads = new LinkedList<Thread>();
    
    
      private Map<String, Rennfahrer> fahrer = new HashMap<String, Rennfahrer>(5);
    
    
      private String[] fahrerNamen = new String[] { "schuhmacher", "trulli",
          "alonso" };
    
    
      public void start() {
    
    
        for (String name : fahrerNamen) {
          fahrer.put(name, new Rennfahrer());
        }
    
    
        for (Rennfahrer rennfahrer : fahrer.values()) {
          Thread thread = new Thread(rennfahrer);
          thread.start();
          threads.add(thread);
        }
    
       for(Thread thread : threads){
         try {
           thread.join();
         } catch (InterruptedException e) {
           e.printStackTrace();
         }
       }
    
        for (String name : fahrer.keySet()) {
          System.out.println("Zeit für " + name + " war "
              + fahrer.get(name).getTime());
        }
      }
    
    
      public static void main(String[] args) {
        new GP().start();
      }
    }
    
    
    class Rennfahrer implements Runnable {
      private int time = 0;
    
    
      /**
       * @return Returns the x.
       */
      public int getTime() {
        return time;
      }
    
    
      Rennfahrer() {
      }
    
    
      public void run() {
        for (int i = 0; i <= 200; i++) {
          time = time + (int) (Math.random() * 6);
          try {
            Thread.sleep(1);
          } catch (Exception e) {
          }
        }
      }
    }
    Alles anzeigen

    lg, Benjamin Ferrari, bookworm.at

  • Blackivory
    3
    Blackivory
    Mitglied
    Punkte
    90
    Beiträge
    13
    • 5. April 2005 um 23:29
    • #6

    Danke @all für die Hilfe.:)

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung