Dieser Artikel enthält eine detaillierte Erläuterung der Implementierungsmethode der Java-Thread-Synchronisierung (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.
Warum Thread-Synchronisierung
Wenn mehrere Threads auf derselben Ressource, z. B. Dateien, ausgeführt werden, können wir nicht zulassen, dass mehrere Threads gleichzeitig ausgeführt werden diese Datei. Denn wenn Dateien gemeinsam genutzt werden, kommt es zu Konflikten zwischen mehreren Vorgängen. Ich glaube, dass Leute, die Git für die Teamentwicklung verwendet haben, über umfassende Erfahrung im Preisvergleich verfügen werden.
Zu diesem Zeitpunkt muss der Thread-Synchronisationsmechanismus eingeführt werden.
Die sogenannte Synchronisierung bezieht sich auf die Ausführung nacheinander, d. Auf diese Weise wird es keine Kämpfe und keine Konflikte geben.
Problembeschreibung
Ein Programm mit zwei Threads. Der erste Thread berechnet gerade Zahlen und Zahlen zwischen 2 und 1000, und der zweite Thread berechnet 1000. Gerade Zahlen und Zahlen zwischen ~2000.
Erste Implementierung
Lassen Sie uns zunächst die Implementierungsmethode entsprechend dem Thema entwerfen.
1. Definieren Sie zwei Threads. Hier müssen Sie Ihre eigene Thread-Klasse definieren und dann den Beginn und das Ende der Berechnung gerader Zahlen festlegen
2 Implementieren Sie die Berechnung gerader Zahlen und die Anzahl der geraden Zahlen innerhalb des angegebenen Bereichs
3 🎜>
1. Definieren Sie Ihre eigene Thread-Klasse:
public class MyTread extends Thread { private int begin; // 范围开始 private int end; // 范围结束 public MyTread(int begin, int end) { this.begin = begin; this.end = end; } }
2. Implementieren Sie die Berechnung von geraden Zahlen und geraden Zahlen
@Override public void run() { this.getEven(begin, end); } // 获取偶数以及个数 private void getEven(int begin, int end) { int count = 0; System.out.println(begin + "~" + end + "之间的偶数为:"); if (begin % 2 != 0) { begin += 1; } for (; begin <p>3. Initialisieren Sie den Thread und führen Sie ihn aus <strong></strong></p><pre class="brush:php;toolbar:false">public static void main(String[] args) { MyTread tread1 = new MyTread(2, 500); MyTread tread2 = new MyTread(500, 1000); tread1.start(); tread2.start(); }
Hinweis: Um den späteren Effekt anzuzeigen, muss der Der Nummernkreis wird reduziert.
Sehen Sie sich die Ergebnisse an:Es scheint nicht der gewünschte Effekt zu sein. Wir möchten diesen Effekt:
Wir möchten, dass die geraden und geraden Zahlen jedes Teils zusammen sind, aber der Effekt nach der Implementierung ist tatsächlich Zwei Es entstehen Teile der Verwirrung.
Verfahrensverbesserung
Um die oben genannten Probleme zu lösen, müssen wir das verwenden, über das wir am Anfang gesprochen haben. 线程同步
zu haben. Was ist also dieses 共享的资源
in unserem Code? Es scheint nicht. Erstellen Sie also zuerst eines. 共享的资源
1. Gemeinsame Ressourcen erstellen
Die gemeinsamen Ressourcen, die wir hier haben, können sein, daher erstellen wir eine weitere Klasse, um gemeinsame Ressourcen zu veranschaulichen. 同一个对象
public class Even {}
2. Erstellen Sie dann eine Methode zur Berechnung gerader Zahlen in der gemeinsam genutzten Klasse:
public class Even { /** * 获取某个范围内偶数以及个数 * @param begin 统计开始 * @param end 统计结束 */ public synchronized void getEven(int begin, int end) { int count = 0; System.out.println(begin + "~" + end + "之间的偶数为:"); if (begin % 2 != 0) { begin += 1; } for (; begin Aufmerksame Leute werden feststellen, dass sich diese Methode ein wenig von der von uns unterscheidet ursprünglich geschrieben, es hat ein weiteres Schlüsselwort: <p>. Durch dieses Schlüsselwort können wir beim Ausführen von Methoden eine Thread-Synchronisation erreichen. <code>synchronized</code></p><p>3. Rufen Sie schließlich die gemeinsam genutzte Methode im Thread auf <strong></strong></p><pre class="brush:php;toolbar:false">public class MyTread extends Thread { Even even; @Override public void run() { even.getEven(begin, end); } }
Wir haben den gewünschten Effekt erzielt. Zuletzt ist der komplette Code angehängt:
/** * 偶数类 */ public class Even { /** * 获取某个范围内偶数以及个数 * @param begin 统计开始 * @param end 统计结束 */ public synchronized void getEven(int begin, int end) { int count = 0; System.out.println(begin + "~" + end + "之间的偶数为:"); if (begin % 2 != 0) { begin += 1; } for (; begin <p class="comments-box-content"><br></p>
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Implementierungsmethode der Java-Thread-Synchronisation (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!