Concurrent Thema

Fohnbit

Top Contributor
Hallo,

ich habe in meiner Klasse:
List
ArrayList
LimitedQueue
LinkedList

Ich hatte einmal die Exception: java.util.ConcurrentModificationException

Meine Frage nun:
Wenn Methoden in meiner Klasse, die andere Threads aufrufen, auf die Variablen zugreifen ... ist sicher gestellt, das keine 2 Methoden zur selben Zeit laufen?

So wird zum Beispiel in einer Methode über einen Loop die LimidetQueue gefüllt.
Und es kann sein das ein Thread über eine andere Methode auch etwas in die Queue legt.

Können also 2 Methoden in der selben Klasse gar nie zeitgleich laufen, oder muss man das irgendwie abfangen?

Danke!
 

stg

Top Contributor
Wenn Methoden in meiner Klasse, die andere Threads aufrufen, auf die Variablen zugreifen ... ist sicher gestellt, das keine 2 Methoden zur selben Zeit laufen?

Zwei Threads laufen unabhängig voneinander und können, sofern beide Kenntnis von den selben daten haben, auch zeitgleich auf die selben Daten zugreifen. Das musst du, sofern es dadurch zu Problemen kommen kann natürlich unterbinden.
 

Fohnbit

Top Contributor
Die anderen Threads greifen nicht direkt auf die Listen zu. Sie rufen eine Methode auf und übergeben darin die nötigen Parameter. Die Methode in der selben Klasse legt dann die Infos in die Liste.

Ich habe inzwischen "CopyOnWriteArrayList" gefunden ... wäre das für die Listen passend?
 

Fohnbit

Top Contributor
Anbei noch 2 Methoden die die Listen beeinflussen:
Java:
    @Override
    public void getStatus(int responseCode, String value) {

        if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
            updateOutputUploadresponse("Fehler beim upload. Authentifizierungsfehler. Falscher Apikey? Error Code: "
                    + responseCode);
            failedUploads1.add(value);
            updateOutputUploadbuffer(failedUploads1.size());
        } else if (responseCode == HttpURLConnection.HTTP_OK) { // success
            updateOutputUploadresponse("Upload OK!");
        } else {
            updateOutputUploadresponse("Fehler beim upload. Error Code: "
                    + responseCode);
            failedUploads1.add(value);
            updateOutputUploadbuffer(failedUploads1.size());
        }

    }

    @Override
    public void getStatus(String error, LimitedQueue<String> data) {
        updateOutputUploadresponse("Fehler beim upload. Error Code: " + error);
        System.out.println("Fehler beim Upload: " + error);
        for (String s : data) {
            System.out.println("Gescheiterter Upload: " + s);
        }
        failedUploads1.addAll(data);
        System.out.println("Data Size: " + data.size());
        System.out.println("Failedupload Size: " + failedUploads1.size());
        updateOutputUploadbuffer(failedUploads1.size());

    }

Die Listen Deklaration:
Java:
    private LimitedQueue<String> failedUploads1 = new LimitedQueue<String>(
            10000);

Und die Queue Klasse selbst:
Java:
public class LimitedQueue<E> extends LinkedList<E> {

    /**
     *
     */
    private static final long serialVersionUID = -4649076009250033576L;
    private int limit;

    public LimitedQueue(int limit) {
        this.limit = limit;
    }

    @Override
    public boolean add(E o) {
        boolean added = super.add(o);
        while (added && size() > limit) {
            super.remove();
        }
        return added;
    }
}
 

stg

Top Contributor
Das ist denkbar, aber auch schon ein recht "schweres Geschütz".
Eine allgemeingültige Antwort gibt es nicht, das hängt immer von vielen Faktoren ab. Zum Beispiel Anzahl an lesenden/schreibenden Zugriffen usw.
Denkbar ist auch einfach ein synchronized Block, aber das kann auch schnell zum Nadelör werden.
Denkbar sind ferner auch Locks.
 

Andy17

Aktives Mitglied
Concurrent Computing ist eher ein Thema für Fortgeschrittene. Wie oben beschrieben spielen viele Faktoren eine Rolle bei der Wahl eines Lösungsansatzes. Erstmalig funktionieren werden alle oben genannten Ansätze. Du kannst jedoch in verschiedene Probleme laufen, selbst wenn Du RaceConditions ausschließen kannst.
Ich würde Dir empfehlen, Dir erstmal etwas Literatur zu Concurrent Computing durchzulesen und dann zu überlegen, wie kritisch deine Operationen sind (Anzahl Zugriffe lesender und schreibender Art) und dann selbst eine Vorgehensweise wählen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BATMAN_2008 Jackson adding additional fields to JSON throws java.util.concurrent.CompletionException: Java Basics - Anfänger-Themen 2
B ThreadPoolExecutor - import java.util.concurrent Java Basics - Anfänger-Themen 2
K Concurrent modification exception Java Basics - Anfänger-Themen 2
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
Kotelettklopfer Java und das leidige Thema "wording" Java Basics - Anfänger-Themen 61
N Thema Vererbung Java Basics - Anfänger-Themen 31
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
T Klassen Kleine Übung zum Thema Klassen Java Basics - Anfänger-Themen 3
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
E Erste Schritte Vorschläge für mich zum Thema Punkt vor Strich ? Java Basics - Anfänger-Themen 7
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Hilfestellung zum Thema Persistenz Java Basics - Anfänger-Themen 12
J Frage zum Thema ... alles mögliche! Java Basics - Anfänger-Themen 6
P Noch zum Thema Arrays Java Basics - Anfänger-Themen 13
T Bin Anfänger ... das Thema auch ? Java Basics - Anfänger-Themen 10
N JAR das Endlose Thema Java Basics - Anfänger-Themen 2
J Neues Forum Thema erstellen mit java(httpclient) Java Basics - Anfänger-Themen 11
Dit_ Frage zum Thema Speicherreservierung Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
I Verständnisfrage zum Thema APIs Java Basics - Anfänger-Themen 6
G Dieses leidige ID Thema Java Basics - Anfänger-Themen 9
N Das alte Thema "File Encoding" Java Basics - Anfänger-Themen 2
D Frage zum heiss geliebten Thema MVC Java Basics - Anfänger-Themen 24
D Abschlussklasse 13 Projektarbeit, thema? Java Basics - Anfänger-Themen 15
J Fragen zum Thema Arrays Java Basics - Anfänger-Themen 5
P Applet not inited - leidiges Thema Java Basics - Anfänger-Themen 6
Z leidiges Thema Datumsformatierung Java Basics - Anfänger-Themen 3
G Leidiges Thema Classpath Java Basics - Anfänger-Themen 5
G Syntax der if-Anweisung (Thema getrennt!) Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben