package com.jackson.deng.concurrent;
/**
* 创建线程有两种方式<br>
* 1.extends Thread<br>
* 2.implement Runnable<br>
* @author jackson
*
*/
public class CreateThread {
public class Calculator implements Runnable {
private int number;
public Calculator(int number) {
this.number = number;
}
/**
* run()执行线程中调用的函数
*/
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.printf("%s: %d * %d = %d\n", //
Thread.currentThread().getName(), number, i, i * number);
}
}
}
public static void main(String[] args) {
CreateThread ct = new CreateThread();
for (int i = 1; i <= 10; i++) {
//匿名内部类调用
Calculator calculator = ct.new Calculator(i);
//创建线程实例--但还没有开启线程
Thread thread = new Thread(calculator);
//开启线程-->每个线程执行各自的run()
thread.start();
}
}
}
它是怎么工作的~?
可以看下面的运行过程
当调用Thread对象的start()方法时,程序创建了另一个线程.在这些start()方法调用后,我们的程序就开启了多个执行线程,分别执行执行这些start()方法.
当全部的线程执行结束时(更具体点,所有非守护线程结束时),Java程序就结束了.如果初始线程(执行main()方法的主线程)运行结束,
其他的线程还是会继续执行直到完成.但是如果某个线程调用System.exit()指示终结程序,那么全部的线程都会结束执行.