Heim Java javaLernprogramm Ist Arraylist-Thread sicher?

Ist Arraylist-Thread sicher?

Jun 05, 2019 am 11:58 AM
arraylist

Was ist Thread-unsicher:

Thread-Sicherheit bedeutet, dass beim Multi-Thread-Zugriff ein Sperrmechanismus verwendet wird, um zu schützen, wenn ein Thread auf bestimmte Daten dieser Klasse zugreift darauf zugreifen, bis dieser Thread mit dem Lesen fertig ist, und dann können andere Threads es verwenden. Es wird keine Dateninkonsistenz oder Datenverschmutzung geben. Thread-Unsicherheit bedeutet, dass kein Datenzugriffsschutz gewährleistet ist. Es ist möglich, dass mehrere Threads nacheinander Daten ändern, was dazu führt, dass es sich bei den erhaltenen Daten um schmutzige Daten handelt.

Ist Arraylist-Thread sicher?

Eine ArrayList, beim Hinzufügen eines Elements kann sie in zwei Schritten vervollständigt werden:

1 Speichern Sie dies Element an der Position von Items[Size];

2. (Empfohlenes Lernen: Java Video Tutorial)

Wenn im Single-Thread-Betrieb Size = 0 ist, befindet sich das Element nach dem Hinzufügen eines Elements an Position 0 und Size = 1;

Und wenn es sich beispielsweise um eine Multithread-Situation handelt, gibt es zwei Threads, Thread A speichert das Element zuerst an Position 0. Aber zu diesem Zeitpunkt plant die CPU, Thread A anzuhalten, und Thread B erhält die Chance, ausgeführt zu werden. Thread B fügt dieser ArrayList auch Elemente hinzu, da Size zu diesem Zeitpunkt immer noch gleich 0 ist (beachten Sie, dass wir davon ausgehen, dass das Hinzufügen eines Elements zwei Schritte erfordert und Thread A nur Schritt 1 abgeschlossen hat), sodass Thread B auch Elemente zu Stored at hinzufügt Standort 0. Dann werden sowohl Thread A als auch Thread B weiter ausgeführt, wobei beide den Wert von Size erhöhen.

Okay, schauen wir uns nun die ArrayList-Situation an. Es gibt tatsächlich nur ein Element, das an Position 0 gespeichert ist, aber Size ist gleich 2. Das ist „Thread unsicher“.

Beispielprogramm:

package test;
 
importjava.util.ArrayList;
 
import java.util.List;
public class ArrayListInThread implements Runnable{
    List<String> list1 = new ArrayList<String>();// not thread safe
    publicvoid run() {
        try {
           Thread.sleep((int)(Math.random() * 2));
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        list1.add(Thread.currentThread().getName());
    }
    public static void main(String[] args) throws InterruptedException {
        ThreadGroup group = new ThreadGroup("mygroup");
        ArrayListInThread t = new ArrayListInThread();
        for (int i = 0; i < 10000; i++) {
            Thread th = new Thread(group, t,String.valueOf(i));
            th.start();
        }
        while (group.activeCount() > 0) {
            Thread.sleep(10);
        }
        System.out.println();
        System.out.println(t.list1.size()); // it should be 10000 if thread safecollection is used.
    }
}
Nach dem Login kopieren

Wie löst man Thread-Unsicherheit?

Erstens: Verwenden Sie das synchronisierte Schlüsselwort, mit dem jeder vertraut sein sollte, daher werde ich es nicht erklären.

Zweitens: Verwenden Sie Collections.synchronizedList(); wie folgt:

Angenommen, der Code, den Sie erstellen, lautet wie folgt: List>data=new ArrayList>();

Um dieses Thread-Sicherheitsproblem zu lösen, können Sie Collections.synchronizedList() wie folgt verwenden:

List<Map<String,Object>> data=Collections.synchronizedList(newArrayList<Map<String,Object>>());
Nach dem Login kopieren

Es hat sich nichts anderes geändert, und die verwendete Methode ist fast dieselbe wie bei ArrayList zum API-Dokument;

Weitere Informationen zu Java finden Sie in der Spalte Java-Entwicklungs-Tutorial!

Das obige ist der detaillierte Inhalt vonIst Arraylist-Thread sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Apr 27, 2023 pm 03:40 PM

1. Der Unterschied zwischen Iterator und foreach ist der polymorphe Unterschied (die unterste Ebene von foreach ist Iterator ein Schnittstellentyp, und es ist egal, ob for und foreach der Typ bekannt ist). 1. Warum heißt es, dass die unterste Ebene von foreach der von Iterator geschriebene Code ist: 2. Der Unterschied zwischen „remove in foreach“ und „iterator“. im Alibaba Java Development Manual, aber in Fall 1 wird kein Fehler gemeldet, und in Fall 2 wird zuerst ein Fehler gemeldet (java. util.ConcurrentModificationException).

Wie überprüfe ich, ob ArrayList ein bestimmtes Element in Java enthält? Wie überprüfe ich, ob ArrayList ein bestimmtes Element in Java enthält? Sep 03, 2023 pm 04:09 PM

Mit der Methode „contains()“ der Schnittstelle „List“ können Sie prüfen, ob ein Objekt in der Liste vorhanden ist. enthält()-Methode booleancontains(Objecto) Gibt „true“ zurück, wenn diese Liste das angegebene Element enthält. Formeller ausgedrückt: Gibt genau dann „true“ zurück, wenn diese Liste mindestens ein Element e enthält, sodass (o==null?e==null:o.equals(e)). Parameter c – das Element, dessen Anwesenheit in dieser Liste getestet werden soll. Rückgabewert Gibt „true“ zurück, wenn diese Liste das angegebene Element enthält. Löst eine ClassCastException aus – wenn der Typ des angegebenen Elements mit dieser Liste nicht kompatibel ist (optional). NullP

Entfernen Sie Elemente aus ArrayList mit der Java-Funktion ArrayList.remove() Entfernen Sie Elemente aus ArrayList mit der Java-Funktion ArrayList.remove() Jul 24, 2023 pm 01:21 PM

Verwenden Sie die ArrayList.remove()-Funktion von Java, um Elemente aus einer ArrayList zu entfernen. In Java ist ArrayList eine häufig verwendete Sammlungsklasse, die zum Speichern und Betreiben einer Reihe von Elementen verwendet wird. Die ArrayList-Klasse bietet viele Methoden zum Hinzufügen, Löschen, Ändern und Abfragen von Elementen in der Sammlung. Eine der am häufigsten verwendeten Methoden ist „remove()“, mit der Elemente aus einer ArrayList entfernt werden können. Die Methode „remove()“ von ArrayList hat zwei überladene Formen: eine

Verwenden Sie die ArrayList.clear()-Funktion von Java, um die Elemente in der ArrayList zu löschen Verwenden Sie die ArrayList.clear()-Funktion von Java, um die Elemente in der ArrayList zu löschen Jul 24, 2023 pm 02:04 PM

Verwenden Sie die ArrayList.clear()-Funktion von Java, um die Elemente in der ArrayList zu löschen. In der Java-Programmierung ist ArrayList eine sehr häufig verwendete Datenstruktur, die Elemente dynamisch speichern und darauf zugreifen kann. In einigen Fällen müssen wir jedoch möglicherweise alle Elemente in der ArrayList löschen, um den Speicher wiederzuverwenden oder freizugeben. Zu diesem Zeitpunkt können Sie die Funktion clear () von ArrayList verwenden, um dies zu erreichen. ArrayList.clear()

Was ist der Grund, warum die anfängliche Kapazität von ArrayList in Java 10 beträgt? Was ist der Grund, warum die anfängliche Kapazität von ArrayList in Java 10 beträgt? May 10, 2023 pm 02:19 PM

Warum ist die anfängliche Kapazität von HashMap 16? Wenn wir über die Initialisierungskapazität von ArrayList sprechen, müssen wir zunächst die Initialisierungskapazität von HashMap überprüfen. Am Beispiel des Java8-Quellcodes gibt es in HashMap zwei relevante Faktoren: Initialisierungskapazität und Ladefaktor: /***Thedefaultinitialcapacity-MUSTbeapoweroftwo.*/staticfinalintDEFAULT_INITIAL_CAPACITY=1>1);if(newCapacity-minCapacity0)newCapacity=hugeCapacity

Java verwendet die Funktion enthält() der Klasse ArrayList, um festzustellen, ob ein Element vorhanden ist Java verwendet die Funktion enthält() der Klasse ArrayList, um festzustellen, ob ein Element vorhanden ist Jul 24, 2023 pm 07:33 PM

Java verwendet die Funktion contains() der Klasse ArrayList, um zu bestimmen, ob ein Element vorhanden ist. ArrayList ist eine sehr häufig verwendete Datenstruktur in der Java-Programmierung. Es bietet eine flexible Möglichkeit, einen Datensatz zu speichern und zu bearbeiten. Zusätzlich zum einfachen Hinzufügen, Löschen und Zugreifen auf Elemente bietet ArrayList auch einige nützliche Methoden, wie beispielsweise die Funktion enthält(), mit der ermittelt wird, ob ein Element in der ArrayList vorhanden ist. Die Funktion enthält () ist A

Erhalten Sie eindeutige Werte von ArrayList in Java Erhalten Sie eindeutige Werte von ArrayList in Java Sep 04, 2023 am 08:41 AM

ArrayList ist eine Klasse des JavaCollectionFrameworks, das die Listenschnittstelle implementiert. Es ist eine lineare Struktur, die jedes Element nacheinander speichert und darauf zugreift

So fügen Sie Elemente in Java mit der Methode add() der Klasse ArrayList hinzu So fügen Sie Elemente in Java mit der Methode add() der Klasse ArrayList hinzu Jul 24, 2023 pm 07:54 PM

So fügen Sie Elemente in Java mit der Methode add() der Klasse ArrayList hinzu. ArrayList ist eine der häufigsten Sammlungsklassen in Java. Sie bietet praktische Methoden zum Verwalten von Arrays mit dynamischer Länge. Das Hinzufügen von Elementen zu einer ArrayList ist eine der häufigsten Operationen, und die Methode add() ist eine der Hauptmethoden zur Implementierung dieser Operation. Die Verwendung der Methode add() ist sehr einfach, sie kann ein Element am Ende der ArrayList hinzufügen. Unten finden Sie einen Beispielcode, der die Verwendung von a demonstriert

See all articles