Threads Parallel laufende Threads

deni1000

Mitglied
Hier die Aufgabe:
df8bf7-1500115385.jpg




Meine Main Klasse->

package paraubung2;

public class Main {

public static void main(String[] args) {

Player jerry = new Player("Jerry");
Player tom = new Player("Tom");
Ball ball = new Ball();

jerry.run();
tom.run();

}

}

Meine Player Klasse->

package paraubung2;

public class Player {

String playername;
private boolean run;

public Player(String name) {
this.playername = name;
run = true;
}

public void run() {
while (run) {

}

}

}


Meine Ball Klasse ->

package paraubung2;

public class Ball extends Thread {

public Ball() {

}

public synchronized void hit(String player) {

}

}



Ich habe jetzt bereits die Main,Player,Ball Klasse mal implementiert, aber irgendwie komme ich nicht weiter, wie muss ich weiter vorangehen..
 
Stell bitte konkrete Fragen. Wir wissen nicht einmal wie die Aufgabe lautet.
Übrigens - Threads werden mit der start() Methode gestartet und nicht mit run().
 
Oben auf dem Bild ist die Aufgabe definiert. Ich wollte fragen, wie ich jetzt nach dem definieren der player und dem ball, das im implementieren könnte. Einen Ansatz wollte ich fragen.
 
Hier mal ein Beispiel. Das ist jetzt nicht perfekt und setzt nicht 1:1 die Aufgabe richtig um, sollte dir aber einen ersten Anhaltspunkt bzgl. der Synchronisation der Threads geben:

Java:
public class Main {
    public static void main(String[] args) {
        Ball b = new Ball();
        Player p1 = new Player("Tom", "Ping!", b);
        Player p2 = new Player("Jerry", "Pong!", b);

        new Thread(p1).start();
        new Thread(p2).start();
    }
}

class Player implements Runnable {

    String name, noise;
    Ball b;

    public Player(String name, String noise, Ball b) {
        this.name = name;
        this.noise = noise;
        this.b = b;
    }

    @Override
    public void run() {
        while (true) {
            b.hit(this);
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNoise() {
        return noise;
    }

    public void setNoise(String noise) {
        this.noise = noise;
    }
}

class Ball {
    private Player lastHit;

    public synchronized void hit(Player p) {
        try {
            while (lastHit == p)
                wait();

            System.out.println(p.getNoise() + "\t" + p.getName());
            lastHit = p;
            Thread.sleep((long) (Math.random() * 3000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        notify();
    }
}
 

Zurück
Oben