我在由Kathy Sierra編寫的OCA準備書中遇到了這個聲明。我假設使用我的jvm運行我的java程序時,它運行一個OS進程。我猜我運行的程序是由這個過程執行的。如果這是真的,java程序如何使用許多操作系統進程?多線程程序和os進程
多線程Java提供了內置的語言功能和API 允許程序在同一時間使用多操作系統的過程(因此,許多 「核」)。
我在由Kathy Sierra編寫的OCA準備書中遇到了這個聲明。我假設使用我的jvm運行我的java程序時,它運行一個OS進程。我猜我運行的程序是由這個過程執行的。如果這是真的,java程序如何使用許多操作系統進程?多線程程序和os進程
多線程Java提供了內置的語言功能和API 允許程序在同一時間使用多操作系統的過程(因此,許多 「核」)。
一個進程獨立運行並與其他進程隔離。它不能直接訪問其他進程中的共享數據。該過程的資源,例如內存和CPU時間,通過操作系統分配給它。
線程是一個所謂的輕量級進程。它有自己的調用堆棧,但可以在同一進程中訪問其他線程的共享數據。每個線程都有自己的內存緩存。如果一個線程讀取共享數據,它將這些數據存儲在它自己的內存緩存中。線程可以重新讀取共享數據。
Java應用程序默認在一個進程中運行。在Java應用程序中,您可以使用多個線程來實現並行處理或異步行爲。
例 下面是創建一個新的線程,並開始運行它的一個例子 -
class RunnableDemo implements Runnable {
private Thread t;
private String threadName;
RunnableDemo(String name) {
threadName = name;
System.out.println("Creating " + threadName);
}
public void run() {
System.out.println("Running " + threadName);
try {
for(int i = 4; i > 0; i--) {
System.out.println("Thread: " + threadName + ", " + i);
// Let the thread sleep for a while.
Thread.sleep(50);
}
}catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start() {
System.out.println("Starting " + threadName);
if (t == null) {
t = new Thread (this, threadName);
t.start();
}
}
}
public class TestThread {
public static void main(String args[]) {
RunnableDemo R1 = new RunnableDemo("Thread-1");
R1.start();
RunnableDemo R2 = new RunnableDemo("Thread-2");
R2.start();
}
}
這將產生下面的結果 -
輸出
Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.
[1] http://www.vogella.com/tutorials/JavaConcurrency/article.html
[2] https://www.tutorialspoint.com/java/java_multithreading.htm
檢查ProcessBuilder
類。 http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
每個ProcessBuilder實例管理一組進程屬性。 start()方法用這些屬性創建一個新的Process實例。
您還可以使用Akuma
在Java服務器(僅限基於UNIX的操作系統)中創建多個網絡進程。
請點擊此鏈接:http://akuma.kohsuke.org
感謝鳳凰。我猜想線程仍然在單個OS進程中運行。但是,文中陳述了「允許程序使用許多操作系統進程的API」。這是真的? –
是的,那是真的。 – Pheonix
每個線程是否轉換爲OS進程?我假設所有線程共享相同的操作系統進程 –