進程(Process)
一個進程代表著一個正在運行的程式實例。每個進程都擁有自己獨立的內存空間,其中包含了程式的程式碼、數據以及運行時的狀態信息。不同進程之間是相互隔離的,每個進程運行在自己專屬的內存空間中,彼此之間不共享內存資源。
假如我使用Line在電腦上,就是啟動一個進程,系統會分配內存空間給進程。當我同時又開了Discord,又是另一個進程,系統會分配另一個內存空間。
進程之間的獨立性保證了系統的穩定性,一個進程的崩潰不會影響其他進程。
線程(Thread)
在一個進程內,線程是可執行的最小單位,它負責實際執行工作。不同於進程,線程之間共享進程的資源,包括內存和文件描述符。線程具有自己的程序計數器、堆棧和狀態信息,並且能夠被操作系統進行運算調度。這種共享資源的結構使得線程之間的通信和資源共享更加方便,因為它們運行在同一個進程的上下文中,可以直接訪問共享的內存空間。
MultiProcessing 多進程
可以想像成一個大型圖書館(類似CPU),圖書館的空間有限,只能供一個閱覽區(類似進程),即同一時間只能讓一群讀者進入閱覽區閱讀書籍。這時,每次只能允許單一群讀者進入閱覽區閱讀,如果另一群讀者想進入,則當前的讀者群體必須離開。
import java.io.IOException;
public class MultipleProcessesExample {
public static void main(String[] args) {
for (int i = 0; i < 6; i++) {
ProcessBuilder processBuilder = new ProcessBuilder("java", "YourJavaClass");
try {
Process process = processBuilder.start();
System.out.println("Process " + (i + 1) + " started.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
MultiThreading 多線程
而擁有多核心的CPU,就像是一個大型圖書館擁有多個閱覽區,它可以同時讓多群讀者(類似多個進程)在不同的閱覽區內閱讀。每個閱覽區內有很多閱讀座位,這就類似於線程,一個閱覽區可以容納多個讀者(線程),也就是一個進程可以有多個線程在其中運行
public class MultipleThreadsExample {
public static void main(String[] args) {
for (int i = 0; i < 6; i++) {
Thread thread = new MyThread("Thread " + (i + 1));
thread.start();
}
}
}
class MyThread extends Thread {
public MyThread(String name) {
super(name);
}
public void run() {
System.out.println("Thread " + getName() + " is running.");
}
}