多线程程序和os进程

时间:2017-10-05 02:58:37

标签: java

我在Kathy Sierra撰写的OCA准备书中看到了这句话。我假设当使用我的jvm运行我的java程序时,它运行一个OS进程。我想我运行的程序是由这个过程执行的。如果这是真的,那么java程序如何使用许多OS进程?

  

多线程Java提供内置语言功能和API   允许程序使用许多操作系统进程(因此,很多   “核心”)同时。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

检查ProcessBuilder课程。 http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

  

每个ProcessBuilder实例都管理一组流程属性。 start()方法使用这些属性创建一个新的Process实例。

您还可以使用Akuma在Java服务器(仅限基于UNIX的操作系统)中创建多个网络进程。

请点击此链接:http://akuma.kohsuke.org