In diesem Artikel werden Multithreading und seine Beispiele vorgestellt.
Java-Programme laufen alle in der Java Virtual Machine (JVM). Innerhalb der JVM wird Multitasking des Programms durch Threads implementiert. Jedes Mal, wenn eine Java-Anwendung mit dem Java-Befehl gestartet wird, wird ein JVM-Prozess gestartet. Im selben JVM-Prozess gibt es nur einen Prozess, nämlich sich selbst. In dieser JVM-Umgebung läuft der gesamte Programmcode in Threads.
Im Allgemeinen sind gängige Java-Anwendungen Single-Threaded. Wenn Sie beispielsweise den Java-Befehl verwenden, um die einfachste HelloWorld-Java-Anwendung auszuführen, wird ein JVM-Prozess gestartet. Im Prozess findet die JVM den Einstiegspunkt main() des Programms und führt dann die Methode main() aus, wodurch ein Thread generiert wird, der als Hauptthread bezeichnet wird. Wenn die Hauptmethode endet, ist der Hauptthread abgeschlossen. Der JVM-Prozess wird ebenfalls sofort beendet.
Bei mehreren Threads in einem Prozess teilen sich mehrere Threads den Speicherblock des Prozesses. Wenn ein neuer Thread generiert wird, weist das Betriebssystem keinen neuen Speicher zu, sondern erlaubt dem neuen Thread, den ursprünglichen Speicherblock zu teilen . Einige Prozesse blockieren den Speicher. Daher ist die Kommunikation zwischen Threads einfach und schnell. Da sich unterschiedliche Prozesse in unterschiedlichen Speicherblöcken befinden, ist die Kommunikation zwischen Prozessen relativ schwierig.
Empfohlene Kurse: Java-Tutorial
Ein Prozess bezieht sich auf eine Anwendung, die im Speicher ausgeführt wird. Jeder Prozess verfügt über einen eigenen unabhängigen Speicherbereich , können mehrere Threads in einem Prozess gestartet werden. In Windows-Systemen ist beispielsweise eine laufende EXE-Datei ein Prozess.
Thread bezieht sich auf einen Ausführungsablauf in einem Prozess. Ein Prozess kann mehrere Threads ausführen. Beispielsweise kann der Prozess java.exe viele Threads ausführen. Threads treten immer in einen Prozess ein, und mehrere Threads in einem Prozess teilen sich den Speicher des Prozesses.
Multi-Threading bezieht sich auf die Tatsache, dass dieses Programm (ein Prozess) mehr als einen Thread generiert, wenn es
Instanz
Thread 1: Als nächstes verwenden Sie die Methode zur Implementierung von Runnable, um Multithreading zu implementieren:.public class TestRunnable implements Runnable { private int time=1; private SourceA s; private String id = "001"; public TestRunnable(SourceA s){ this.s = s; } public void setTime(int time) { this.time = time; } @Override public void run() { try { System.out.println("i will sleep"+ time); Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } synchronized(s){ s.notify(); System.out.println("我唤醒了002!"); System.out.println("我存入了id"+id); s.setSource(id); } } }
public class TestThread extends Thread { private int time = 1; private SourceA s = null; String id = "002"; public void setTime(int time) { this.time = time; } public TestThread(SourceA s){ this.s = s ; } @Override public void run() { try { System.out.println("i will sleep"+ time); sleep(time); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized(s){ try { System.out.println("我"+ id +"要进行等待了"); s.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("我被唤醒了"); System.out.println("我存入了id"+id); s.setSource(id); } } }
public class SourceA { private List<String> list = new ArrayList<String>(); public synchronized void getSource(){ for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } } public synchronized void setSource(String id){ list.add(id); } }
public void test(){ SourceA s = new SourceA(); TestThread tt = new TestThread(s); TestRunnable tr = new TestRunnable(s); Thread t = new Thread(tr); System.out.println("调用线程1"); tt.start(); System.out.println("调用线程2"); t.start(); }
Das obige ist der detaillierte Inhalt vonWas ist Java-Multithreading?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!