java-Zugriff auf ein Objekt in verschiedenen threads

Gesucht hab ich viel, aber nicht in der Lage zu finden, insbesondere Lösung. Es gibt auch einige Frage bezüglich dieser auf stackoverflow, aber ich bin nicht in der Lage, um zufriedenstellende Antwort, also Frage ich es wieder.

Habe ich eine Klasse wie folgt in java . Ich wissen, wie die Verwendung von threads in java.

//please do not consider syntax if there is printing mistake, as i am typing code just for showing the concept in my mind
    public class myclass{
    private List<String> mylist=new ArrayList<String>();

    public addString(String str){
     //code to add string in list
    }

    public deleteString(String str){//or passing an index to delete
     //code to delete string in list
    }
}

jetzt möchte ich diese beiden Operationen gleichzeitig. für die, die ich erstellt habe zwei thread-Klasse führt man addString () - Logik in führen und andere führen deleteString () - Logik.ich bin vorbei mylist in den Konstruktor der einzelnen thread, aber wie kann ich ein Objekt zurückgeben, nach der Durchführung der Ergänzung und Löschung zu mylist?

Bevor ich dachte, dass "Wenn ich bin vorbei an den mylist im Konstruktor von thread übergibt die Adresse des mylist thread und thread führt Operationen auf Sie, die änderungen beziehen sich auf mylist-Objekt", Aber es ist nicht so, dass die änderungen nicht reflacted zu mylist-Objekt . kann einer aufwändigen diese?

was ist der beste Weg, dies zu erreichen?

Voraussetzung ist wie, wenn ein thread einfügen eines Elements am letzten anderen thread sollte in der Lage sein, löschen Sie ein element unter anderen index-sagen 2. gleichzeitig.

BEARBEITEN

ich habe es wie folgt aus: vielen Dank an Enno Shioji

public class myClass {

    private List<String> mylist = Collections.synchronizedList(new ArrayList<String>());
    public myClass(){
        mylist.add("abc");
        mylist.add("def");
        mylist.add("ghi");
        mylist.add("jkl");
    }
    public void addString(String str) {
        mylist.add(str);
    }

    public void displayValues() {
        for (int i = 0; i < mylist.size(); i++) {
            System.out.println("value is " + mylist.get(i) + "at " + i);
        }
    }

    public void deleteString(int i) {
        mylist.remove(i);
    }
}

class addThread {

    public static void main(String a[]) {
        final myClass mine = new myClass();
        Thread t1 = new Thread() {

            @Override
            public void run() {
                mine.displayValues();
                mine.addString("aaa");
                mine.displayValues();
            }
        };
        Thread t2 = new Thread() {

            public void run() {
                mine.displayValues();
                mine.deleteString(1);
                mine.displayValues();
            }
        };
        t1.start();
        t2.start();
    }
}

gibt es eine andere Möglichkeit, dies zu tun?

  • Können Sie zeigen, wie Sie sind, die threads und wie Sie versuchen, zu löschen und einfügen von Werten ?
  • Deine Frage ist sehr verwirrend. Sie beschrieben Klasse myclass aber nicht einmal Sie, erwähnen Sie es in Ihrer Frage. mylist ist einfach eine Liste mit add und remove, was Sie brauchen myclass für? Es ist wichtiger zu sehen-code, den Sie verwenden, um threads erstellen und code, der verwendet add und delete.
  • bitte siehe das edit
  • In deinem edit, ich glaube, Sie können addString() und deleteString() synchronisierte Methoden, während immer noch verwenden Sie eine gewöhnliche ArrayList für mylist. Korrigieren Sie mich, wenn ich falsch bin.
Schreibe einen Kommentar