创建运行线程

在 Java 中有两种方式创建线程:

  • 扩展 Thread 类并覆盖 run() 方法
  • 构建一个实现 Runnable 接口的类并作为参数用以创建一个 Thread 对象

任务

使用多线程的方式演示10*10以内的乘法结果.

实现

本节的示例代码在 com.elanzone.books.noteeg.chpt1.sect02 package中

  • 线程类 : Calculator : implements Runnable

    • run() 方法
        @Override
        public void run() {
            // 输出乘法结果
            for (int i = 1; i <= ThreadNum; i++) {
                System.out.printf("%s: %d * %d = %d\n",
                        Thread.currentThread().getName(), number, i, i * number);
            }
        }
    
  • 控制类 : Main

    • main() 方法
      循环10次,每次:
      1. 创建 Calculator 实例
      2. 把 Calculator 实例作为构造参数创建 Thread
      3. 调用线程实例的 start() 方法启动线程
        public static void main(String[] args) {
            for (int i = 1; i <= 10; i++) {
                Calculator calculator = new Calculator(i);
                Thread thread = new Thread(calculator);
                thread.start();
            }
        }
    

讲解

  • 每个Java程序有个执行线程,运行程序时,JVM调用此执行线程调用程序的main()方法。
  • 调用线程(Thread)对象的start() 方法时,将创建另一个执行线程。调用多少次则创建多少个线程。
  • Java程序在所有非守护线程结束后结束。
    • 如果初始线程(调用main方法的线程)结束了,其他的线程将继续执行直到它们结束。
    • 如果其中一个线程调用 System.exit 来结束程序的执行, 所有 线程将结束执行。
  • 创建新的执行线程
    • 创建Thread对象 不会 创建新的执行线程
    • 调用实现 Runnable 接口的类的 run() 方法也 不会 创建新的执行线程
    • 只有调用 start() 方法才会创建一个新的执行线程

了解更多

以上演示了创建线程的其中一种方式,另一种方式是什么呢?