Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)

Machen wir in Java dasselbe wie beim letzten Mal.

long.java



public class Main {

    private static final int REPEAT = 500000000;

    private static long a = 0;

    public static void main(String[] args) throws InterruptedException{

        Thread th1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i <REPEAT; i++){
                    a = 1;
                    check();
                }
            }
        });

        Thread th2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i <REPEAT; i++){
                    a = -1;
                    check();
                }
            }
        });

        th1.start();
        th2.start();

        th1.join();
        th2.join();

        System.out.println("FINISHED!");
    }

    private static void check(){
        if(a != 1 && a != -1){
            System.out.println("LONG VALUE HAS BROKEN!");
        }
    }
}

Keine ausschließliche Kontrolle, aber es gibt einen flüchtigen Modifikator, um ein ähnliches Problem in Java zu lösen private volatile static long a = 0; Dann wird es kein Problem geben.

Volatile hat die Eigenschaft, "immer auf den neuesten Wert zu achten, wenn auf einen Wert verwiesen wird". Grob gesagt verhalten sich flüchtige Zuweisungen und Referenzen so, als wären sie gesperrt.

Aber das ist nicht sicher, deshalb benutze ich Atomic Long. Atomic: Unteilbare Operation. Dies bedeutet, dass andere bei der Ausführung einer Operation die Operation nicht unterbrechen können. private static AtomicLong a = new AtomicLong(0)

Zitat: http://d.hatena.ne.jp/cero-t/20120830/1346267076

Ein synchronisierter Block kann zur exklusiven Steuerung in Java verwendet werden.

synchronized


public class Main {

    private static final int REPEAT = 500000000;

    private static Long a = new Long(0);

    public static void main(String[] args) throws InterruptedException{

        Thread th1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i <REPEAT; i++){
                    synchronized (a){
                        a = new Long(1);
                        check();
                    }
                }
            }
        });

        Thread th2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i <REPEAT; i++){
                    synchronized (a) {
                        a = new Long(-1);
                        check();
                    }
                }
            }
        });

        th1.start();
        th2.start();

        th1.join();
        th2.join();

        System.out.println("FINISHED!");
    }

    private static void check(){
        if(a != 1 && a != -1){
            System.out.println("LONG VALUE HAS BROKEN!");
        }
    }
}

Stream # parallel kann für die parallele Verarbeitung in Java verwendet werden.

parallel


public class Main {

    public static void main(String[] args) {
	// write your code here
        IntStream.range(1,10).parallel().forEach(System.out::println);
    }
}

Recommended Posts

Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)
Gemessene Parallelverarbeitung mit Java
Verschiedene Threads in Java
Java zufällig, verschiedene Verarbeitung
Parallele Ausführung in Java
Argumente variabler Länge in verschiedenen Sprachen
Beispiel für Codierung und Decodierung in Java
Datumsverarbeitung in Java (LocalDate: Initialisierung)
[Java] Schleifenverarbeitung und Tabelle von neunundneunzig
StringBuffer- und StringBuilder-Klasse in Java
Verstehe gleich und hashCode in Java
Informationen zur Dateikopierverarbeitung in Java
[Java] Ausnahmetypen und grundlegende Verarbeitung
Hallo Welt in Java und Gradle
Webanwendungsstruktur nach Java und Verarbeitungsablauf in der Präsentationsschicht
Unterschied zwischen final und Immutable in Java
Verschiedene Dinge wie Bitflags in Java
Zusammenfassung der Stammklassen in verschiedenen Sprachen
Unterschied zwischen Arrylist und verknüpfter Liste in Java
Programmieren Sie PDF-Kopf- und Fußzeilen in Java
Lernen Sie Flyweight-Muster und ConcurrentHashMap in Java
Die Richtung von Java in "C ++ Design and Evolution"
Von Java nach C und von C nach Java in Android Studio
Lesen und Schreiben von GZIP-Dateien in Java
Unterschied zwischen int und Integer in Java
Diskriminierung von Enum in Java 7 und höher
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung der Syntaxanalyse in Java
[Java] Verschiedene Methoden, um den in List gespeicherten Wert durch iterative Verarbeitung zu ermitteln
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung von Teilen in Java
Effektive Java 3rd Edition Kapitel 6 Aufzählung und Anmerkungen
In Bezug auf transiente Modifikatoren und Serialisierung in Java
Erkennen Sie ähnliche Videos in Java und OpenCV Version 2
Sicherheitslücken und Gegenmaßnahmen bei der wichtigen Verarbeitung (Einkaufsabwicklung) (CSRF)
Effektive Java 3rd Edition Kapitel 4 Klassen und Schnittstellen
Unterschied zwischen next () und nextLine () in Java Scanner
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Notizen im Kopf organisieren (Java - Instance Edition)
Effektive Java 3rd Edition Kapitel 7 Lambda und Stream
[Verarbeitung × Java] Datentyp und objektorientierte Programmierung
Erfassen und speichern Sie die Selen-Installation in Java
Erkennen Sie ähnliche Videos in Java und OpenCV Version 3
Hinzufügen, Lesen und Löschen von Excel-Kommentaren mit Java
Überprüfen Sie das statische und öffentliche Verhalten in Java-Methoden
[Java] Verstehe in 10 Minuten! Assoziatives Array und HashMap
Einführung des NLP4J- [000] Natural Language Processing Index in Java
Unterscheiden Sie in Java zwischen positiven und negativen Zahlen
Java fügt Wasserzeichen in Word-Dokumenten hinzu und entfernt sie
Erkennen Sie ähnliche Videos in Java und OpenCV Version 1
Repräsentiert "nächster Tag" und "vorheriger Tag" in Java / Android
Fragen in Java-Ausnahmebehandlung werfen und versuchen-fangen
Laden Sie Notizen in Java auf S3 hoch und laden Sie sie herunter
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
Generieren Sie OffsetDateTime aus Clock und LocalDateTime in Java
Partisierung in Java
Stream und paralleler Stream
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
Änderungen in Java 11