[JAVA] Thread-sichere Liste

Ich habe Angst vor Parallelverarbeitung

Grundsätzlich sollten Sie bei Listen vorsichtig sein, aber wenn es um Parallelverarbeitung geht Achten Sie auf Multithreading

Zum Beispiel

Nicht gut.java


	private static List<String> list = new ArrayList<>();
	
	private static Consumer<Integer> qwe = v -> list.add(String.format("%s: %s", Instant.now(), v));
	
	public static void main(String[] args) {
		IntStream.range(0, 9).boxed().collect(Collectors.toList()).parallelStream().forEach(qwe);
		list.forEach(System.out::println);
	}

Das Ergebnis ist

null
null
null
2019-11-08T17:37:22.279Z: 7
2019-11-08T17:37:22.313Z: 3
2019-11-08T17:37:22.313Z: 0
2019-11-08T17:37:22.313Z: 4
2019-11-08T17:37:22.313Z: 6
2019-11-08T17:37:22.313Z: 8

Und

2019-11-08T17:37:48.381Z: 7
2019-11-08T17:37:48.381Z: 5
2019-11-08T17:37:48.381Z: 2
2019-11-08T17:37:48.416Z: 0
2019-11-08T17:37:48.416Z: 8
2019-11-08T17:37:48.417Z: 4
2019-11-08T17:37:48.417Z: 3
2019-11-08T17:37:48.417Z: 6

Oder es ist schon durcheinander Was ist null w Ich versuche es gleichzeitig zu tun, wenn ich es zur Liste hinzufüge Ich verstehe nicht gut und ich habe Probleme.

Damit ...

Das ist okay.java


	private static List<String> list = Collections.synchronizedList(new ArrayList<>());
	
	private static Consumer<Integer> qwe = v -> list.add(String.format("%s: %s", Instant.now(), v));
	
	public static void main(String[] args) {
		IntStream.range(0, 9).boxed().collect(Collectors.toList()).parallelStream().forEachOrdered(qwe);
		list.forEach(System.out::println);
	}

Verwenden Sie thread-safe synchronizedList Und hinzugefügt mit for Eachordered, um die Bestellung zu arrangieren Lambdas für jeden wird nacheinander ausgeführt, daher ist sysout dasselbe

2019-11-08T17:40:22.228Z: 0
2019-11-08T17:40:22.259Z: 1
2019-11-08T17:40:22.259Z: 2
2019-11-08T17:40:22.260Z: 3
2019-11-08T17:40:22.260Z: 4
2019-11-08T17:40:22.260Z: 5
2019-11-08T17:40:22.260Z: 6
2019-11-08T17:40:22.260Z: 7
2019-11-08T17:40:22.260Z: 8

Es wird es schön machen

In einem Wort

Wenn Sie es gleichzeitig ändern, kommt es zu einem Konflikt! Halt! ich meine Ist es in Ordnung, zu einem Thread-sicheren zu wechseln, wenn Sie vorsichtig sind?

Recommended Posts

Thread-sichere Liste
Listenmethode
Arbeitsliste
Linkliste
Selenid-Optionsliste
Java Memorandum (Liste)
Klonen Sie die Java-Liste.
[Swift] Erfassungsliste
Array / Liste / Karte