计算机程序设计-2025版-教学案例-第11章

89 阅读2分钟

eg 11.1.1

// 创建一个继承自Thread类的子类
class MyThread extends Thread {
    private String message;
    
    // 构造方法,接收要打印的信息
    public MyThread(String message) {
        this.message = message;
    }
    
    // 覆盖Thread类的run方法
    @Override
    public void run() {
        // 循环打印信息10次
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + ": " + this.message + " " + i);
            // 为了看到更明显的并发效果,这里让线程休眠一下
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class MultiThreadingExample {
    public static void main(String[] args) {
        // 创建两个线程实例
        MyThread thread1 = new MyThread("Hello from Thread 1");
        MyThread thread2 = new MyThread("Hello from Thread 2");
        
        // 启动线程
        thread1.start();
        thread2.start();
        
        // 注意:start()方法调用后,线程会进入就绪状态,等待CPU的调度执行
        // main线程也会继续向下执行,不会等待thread1和thread2执行完毕
    }
}

eg 11.1.1-2

/*
在Java中,与多线程(Threads)不同,多进程(Processes)的概念并不是Java直接支持的核心特性,因为Java是设计为一种运行在Java虚拟机(JVM)上的语言,它主要关注于线程级别的并发。然而,Java程序可以通过运行时环境(如操作系统)间接地创建和管理多个进程。
在Java中,通常使用Runtime.getRuntime().exec(String command)方法或ProcessBuilder类来启动外部进程。这里我将给出一个使用ProcessBuilder类来启动多个外部命令(可以视为多个进程)的简单示例。请注意,这些外部命令实际上是在操作系统的层面上作为独立的进程运行的。
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MultiProcessExample {
    public static void main(String[] args) {
        // 创建一个ProcessBuilder实例来启动notepad.exe(记事本)作为一个进程(示例,请根据实际情况调整)
        ProcessBuilder processBuilder1 = new ProcessBuilder("notepad.exe");
        try {
            Process process1 = processBuilder1.start();
            System.out.println("Process 1 started.");
            
            // 另一个示例,使用cmd.exe来运行dir命令(在Windows上)
            ProcessBuilder processBuilder2 = new ProcessBuilder("cmd.exe", "/c", "dir");
            Process process2 = processBuilder2.start();
            
            // 读取process2的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process2.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("Process 2 Output: " + line);
            }
            
            // 等待process2结束
            int exitCode = process2.waitFor();
            System.out.println("Process 2 exited with code " + exitCode);
            
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}