2017-10-05 84 views
0

我在由Kathy Sierra編寫的OCA準備書中遇到了這個聲明。我假設使用我的jvm運行我的java程序時,它運行一個OS進程。我猜我運行的程序是由這個過程執行的。如果這是真的,java程序如何使用許多操作系統進程?多線程程序和os進程

多線程Java提供了內置的語言功能和API 允許程序在同一時間使用多操作系統的過程(因此,許多 「核」)。

回答

1

一個進程獨立運行並與其他進程隔離。它不能直接訪問其他進程中的共享數據。該過程的資源,例如內存和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

+0

感謝鳳凰。我猜想線程仍然在單個OS進程中運行。但是,文中陳述了「允許程序使用許多操作系統進程的API」。這是真的? –

+0

是的,那是真的。 – Pheonix

+0

每個線程是否轉換爲OS進程?我假設所有線程共享相同的操作系統進程 –