线程的创建
Java 虚拟机的主线程入口是 main 方法,用户可以自己创建线程,创建方式有两种:
继承 Thread 类
实现 Runnable 接口(推荐使用 Runnable 接口)
继承 Thread 类
Thread 类中创建线程最重要的两个方法为:
public void run()
public void start()
采用 Thread 类创建线程,用户只需要继承 Thread,覆盖 Thread 中的 run 方法,父类 Thread 中
的 run 方法没有抛出异常,那么子类也不能抛出异常,最后采用 start 启动线程即可。
不使用线程:
public class Text1 {
public static void main(String[] args) {
Processor p = new Processor();
p.run();
method1();
}
private static void method1() {
System.out.println("--------method1()----------");
}
}
class Processor {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
}
结果:
0
1
2
3
4
5
6
7
8
9
--------method1()----------
以上顺序输出相应的结果,也就是 run 方法完全执行完成后,才执行 method1 方
法,也就是 method1 必须等待前面的方法返回才可以得到执行。
使用多线程
public class Text2 {
public static void main(String[] args) {
Processor1 p1 = new Processor1();
//不能采用 run 来启动一个线程
//run 就是一个普通方法调用
//采用 start 启动线程,不是直接调用 run
//start 不是马上执行线程,而是使线程进入就绪
//线程的正真执行是由 Java 的线程调度机制完成的
p1.start();
//只能启动一次
//p.start();
method1();
}
private static void method1() {
System.out.println("--------method1()----------");
}
}
class Processor1 extends Thread {
//覆盖 Thread 中的 run 方法,该方法没有异常
//我们不应该手动调用该方法
public void run() {
for (int i=0; i<10; i++) {
System.out.println(i);
}
}
}
结果:
--------method1()----------
0
1
2
3
4
5
6
7
8
9
通过输出结果可以看到,没有顺序执行,而在输出数字的同时执行了 method1()方法,如果从效率上看,采用多线程的示例要快些,因为我们可以看作它是同时执行的,mthod1()方法没有等待前面的操作完成才执行。
实现 Runnable 接口
public class Text3