我在Kathy Sierra撰写的OCA准备书中看到了这句话。我假设当使用我的jvm运行我的java程序时,它运行一个OS进程。我想我运行的程序是由这个过程执行的。如果这是真的,那么java程序如何使用许多OS进程?
多线程Java提供内置语言功能和API 允许程序使用许多操作系统进程(因此,很多 “核心”)同时。
答案 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