Funktion sperren bis Unterfunktionen ferig sind

Excid

Mitglied
Hallo Community,

Ich habe folgenden Code.
Java:
private static int stopIndex=0;
static Vector<Server> Servers = null;
public static void Stop () {		
		System.out.println("Stopping...");
		stopIndex=Servers.size();
		while(stopIndex>0){
			Runnable R = new Runnable() {
				public void run() {

					Server C = Servers.get(stopIndex-1);
					System.out.println("Stopping server on port: " + C.getPort());
					synchronized(C) {
						if(C!=null)
							C.close();	
					}
					
					Servers.remove(C);
					
					C = null;
						
				}
					
			};
			Thread serverCloser = new Thread(R);
			serverCloser.start();
			stopIndex--;
		}
		Servers = null;
	}

Aktuell wenn ich Stop() ausführe werden, X Threads gestartet welche 10 Sekunden laufen.
X steht hier für die gestartet Server im Vector.
Sobald ein Server gestoppt wird, sendet dieser an alle seine Clients die Meldung das er in 10 Sekunden heruntergefahren wird.

Mein Problem. Wie schaffe ich es, das die Stop Funktion erst dann verlassen wird, wenn alle Threads fertig sind und Trotzdem alle Threads gleichzeitig laufen.
Das heisst das die ganze Aktion auch nur ~10 Sekunden dauert und nicht beispielsweise bei 10 Servern ganze 100 Sekunden.
Ah und aktuell wenn ich die Stop Funktion aufrufe, wird diese direkt verlassen und die Anwendung beendet.

Hmm ich bin unsicher ob ich das ganze "gut" beschrieben habe. Der Titel ist bestimmt auch nicht soooo super. Nur da ich nicht mal weiß ich nach der Lösung suchen soll, wüsste ich auch nicht wie ich es anders beschreiben kann ^^

Danke schon im voraus.

mfg Excid
 

Excid

Mitglied
Danke der Tipp war Super.

Hier die Lösung.

Danke :)

Java:
private static CountDownLatch stopLatch;
public static void Stop () {
		int stopIndex = 0;;
		System.out.println("Stopping...");
		stopIndex=Servers.size();
		stopLatch = new CountDownLatch(Servers.size());
		while(stopIndex>0){
			
			Runnable R = new Runnable() {
				public void run() {
					Server C = null;	
					synchronized (Servers) {

						C = Servers.get(Servers.size()-1);
						Servers.remove(C);
					}
					

					int p = C.getPort();
					System.out.println("Stopping server on port: " + p);
					synchronized(C) {
						if(C!=null)
							C.close();	
						System.out.println("Server on port: "+p+" stopped.");
					}
					
					C = null;
					stopLatch.countDown();	
				}
					
			};
			Thread serverCloser = new Thread(R);
			serverCloser.start();
			
			stopIndex--;
		}
		try {
			stopLatch.await();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Servers = null;
	}
 

André Uhres

Top Contributor
Auch wenn die Methode "stop" verlassen wird, dürfte das ja noch nicht die Anwendung beenden. Bei mir funktioniert es jedenfalls auch ohne CountDownLatch:
Java:
import java.util.*;
import java.util.logging.*;

public class ThreadTest {

    private static int stopIndex = 0;
    static Vector<Server> servers = null;

    public ThreadTest() {
        servers = new Vector<Server>();
        for (int i = 0; i < 10; i++) {
            servers.add(new Server("port" + i));
        }
        for (Server server : servers) {
            Thread thread = new Thread(server);
            thread.start();
        }
        stop();
    }

    public static void stop() {
        System.out.println("Stopping...");
        stopIndex = servers.size();
        while (stopIndex > 0) {
            final Server server = servers.get(stopIndex - 1);
            Runnable close = new Runnable() {

                @Override
                public void run() {
                    System.out.println("Stopping server on port: " + server.getPort());
                    synchronized (server) {
                        if (server != null) {
                            server.close();
                        }
                    }
                }
            };
            Thread serverCloser = new Thread(close);
            serverCloser.start();
            servers.remove(server);
            stopIndex--;
        }
        servers = null;
        System.out.println("OK");
    }

    public static void main(String args[]) {
        new ThreadTest();
    }
}

class Server implements Runnable {

    private final String port;
    private boolean closed;

    public Server(String port) {
        this.port = port;
    }

    public String getPort() {
        return port;
    }

    public void close() {
        try {
            Thread.sleep(10000);
        } catch (InterruptedException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
        closed = true;
    }

    @Override
    public void run() {
        while (!closed) {
            try {
                Thread.sleep(300);
            } catch (InterruptedException ex) {
                Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.out.println(port + " now closed");
    }
}

Übrigens werden Methodennamen un Variablennamen immer klein geschrieben, Klassennamen dagegen immer groß.

Gruß,
André
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
S Validation Annotation Funktionsparameter vs Funktion vs Attribut Allgemeine Java-Themen 0
R Variablen String mit split-Funktion aufteilen Allgemeine Java-Themen 7
A Serialize - Add Funktion Allgemeine Java-Themen 1
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
A Variablen Funktion übergibt den Wert nicht Allgemeine Java-Themen 13
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
A Plot funktion applet Allgemeine Java-Themen 4
S Methoden "Unschöne" Break-Anweisung aus verschachtelter Funktion entfernen Allgemeine Java-Themen 11
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
T Best Practice MD5 Funktion Allgemeine Java-Themen 9
perlenfischer1984 Testng : Funktion mit mehreren Parametern testen Allgemeine Java-Themen 5
L Stack overflow bei einer endrekursiven Funktion (Anwendung: Spezialform des Package Merge) Allgemeine Java-Themen 4
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
O JNA Zugriff auf Funktion aus DLL Allgemeine Java-Themen 0
Lord.Djerun (Taschenrechner) jButtons mit gleicher Funktion zusammenfassen Allgemeine Java-Themen 6
I Javafx Open/Read und Tree Funktion Allgemeine Java-Themen 14
C Generic-Funktion nur bei bestimmten Typen erlauben Allgemeine Java-Themen 6
F Classpath als Argument in Funktion übergeben Allgemeine Java-Themen 3
H SHA256 update-Funktion Allgemeine Java-Themen 3
J Methoden Abgeänderte Fibonacci Funktion Allgemeine Java-Themen 2
G Polymorphie Funktion als Parameter Allgemeine Java-Themen 8
F Funktion nur in einem Zeitraum Allgemeine Java-Themen 5
H java.util.Timer und Funktion mit SQL Exception Allgemeine Java-Themen 5
M Anzahl der Durchläufe einer Funktion errechnen Allgemeine Java-Themen 6
J Autofill Funktion Uhrzeit Allgemeine Java-Themen 19
G Timeout funktion zu einer Eventlogabfrage Allgemeine Java-Themen 2
M Funktion gesucht: Text vektorisieren Allgemeine Java-Themen 20
K Warum wartet diese Funktion auf beenden des Threads? Allgemeine Java-Themen 3
N JNI Callback Funktion Allgemeine Java-Themen 8
D Problem bei der Darstellung einer trigonometrischen Funktion Allgemeine Java-Themen 2
D Referenz einer Funktion aus einer anonymen Klasse? Allgemeine Java-Themen 3
J Funktion zu einer Uhrzeit/datum ausführen Allgemeine Java-Themen 4
S eigene Update Funktion Allgemeine Java-Themen 5
Ark Name für Funktion gesucht Allgemeine Java-Themen 5
Screen Eine mathematische Funktion als Argument für eine Methode - Matheparser? Allgemeine Java-Themen 21
Daniel_L Bug in Copy-Funktion bei HTML-Editorpane? Allgemeine Java-Themen 4
multiholle Aufrufer einer Funktion ermitteln Allgemeine Java-Themen 13
W JMF- Player.getDuration() Funktion spinnt Allgemeine Java-Themen 2
C JTextComponent - mit Schlagwörter Funktion aufrufen Allgemeine Java-Themen 2
SuperSeppel13 php-funktion aufrufen Allgemeine Java-Themen 5
M get Funktion von Vector Allgemeine Java-Themen 4
V Wie Enum an Funktion "übergeben" ? Allgemeine Java-Themen 4
G Webserver Funktion Allgemeine Java-Themen 3
S Random funktion in einer Grafischen Oberfläche Allgemeine Java-Themen 10
C Funktion stoppt alles Allgemeine Java-Themen 7
G Funktion aus array aufrufen Allgemeine Java-Themen 16
P Funktion vorhanden - wie auf Transitivität erweitern? Allgemeine Java-Themen 6
N Funktion als Parameter einer anderen Funktion Allgemeine Java-Themen 5
lumo Row Header ist public, zeigt die funktion aber nicht public Allgemeine Java-Themen 8
P Unterschied zwischen Funktion und Methoden Allgemeine Java-Themen 3
B E-Funktion mit Java Allgemeine Java-Themen 9
S verstehe diese Funktion nicht Allgemeine Java-Themen 6
S Referenz auf Funktion? Allgemeine Java-Themen 16
K Funktion unabhängig vom Namen aufrufen Allgemeine Java-Themen 5
F Vorteile -> Funktion Allgemeine Java-Themen 2
P gegenstück zur php funktion gzinflate()? Allgemeine Java-Themen 3
D Problem bei Aufruf einer Funktion Allgemeine Java-Themen 3
J Welche Daten für Ative-X Funktion? Allgemeine Java-Themen 5
X Replay Funktion realisieren? Allgemeine Java-Themen 5
J Funktion alle Möglichkeiten berücksichtigen Allgemeine Java-Themen 5
P DLL Funktion benutzen Allgemeine Java-Themen 3
S Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink Allgemeine Java-Themen 2
T Pipe-Funktion - Prozente falsch? Allgemeine Java-Themen 8
A undo funktion in Malprogramm Allgemeine Java-Themen 15
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
M Frage zu resume funktion bei downloadmanager Allgemeine Java-Themen 7
M Funktion liest nach Textaus aus der vorigen Zeile Allgemeine Java-Themen 2
G nichtabstrakte Funktion zu einer Interface hinzufügen Allgemeine Java-Themen 6
M Funktion des JRE Allgemeine Java-Themen 8
B Nach Deserialisieren: Elemente des JFrames ohne Funktion Allgemeine Java-Themen 5
A funktion schiffeZeichnen zwei mal aufrufen Allgemeine Java-Themen 16
P Suche String Tutorial zu Suche&Ersetze Funktion von text Allgemeine Java-Themen 35
D Mathematische Funktion grafisch in Java darstellen Allgemeine Java-Themen 2
7 Gibts in Java ne Funktion, die ein ganzes Array ausgibt Allgemeine Java-Themen 11
L sin cos funktion Allgemeine Java-Themen 5
L return-Funktion Allgemeine Java-Themen 5
L return Funktion Allgemeine Java-Themen 6
M Funktion als Parameter oder andere Möglichkeit Allgemeine Java-Themen 3
H Funktion aus einer anderen Klasse ausführen Allgemeine Java-Themen 3
TRunKX Gibt es ne fertige Java Funktion die Dateien vergleicht? Allgemeine Java-Themen 4
M Funktion wird nicht durchlaufen. Allgemeine Java-Themen 13
G Bilder zeichnen und Zoom Funktion Allgemeine Java-Themen 2
G java funktion in JSP file aufrufen. Allgemeine Java-Themen 2
K funktion aus einem String aufrufen Allgemeine Java-Themen 9
L C# Funktion in Java aufrufen Allgemeine Java-Themen 4
thE_29 Funktion mit Funktionaufrufen Allgemeine Java-Themen 4
G Funktion, die langsam wächst Allgemeine Java-Themen 7
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
U Zugriff auf Datei sperren Allgemeine Java-Themen 5
N Problem: Datei sperren um dann hineinzuschreiben Allgemeine Java-Themen 2
D Datei lesen ohne sie für umbenennen/verschieben zu sperren Allgemeine Java-Themen 13
B Jar- Sperren oder nur als auszuführende Datei Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben