Java多线程[1]:创建线程

Java定义了创建线程的两种方法:

  • 实现Runnable接口
  • 扩展Thread类
    接下来,我们通过实现Runnable接口的方式来创建线程

通过实现Runnable接口来创建线程

首先,我们定义一个叫NewThread的类,实现Runnable,并覆写Run方法

public class NewThread implements Runnable {

    Thread t;
    public NewThread() {
        t = new Thread(this, "my test thread");
        t.start();
        System.out.println("线程已启动");
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("child thread:"+i);
        }
        System.out.println("child thread exist");
    }
}

我们首先定义一个线程,然后实例化它,调用Thread的构造函数,把当前对象的引用和线程的名字作为参数传递,这意味着,Thread对象t在运行的时候,会调用当前对象(NewThread对象)的run方法。随后,我们在NewThread类的构造函数中启动了线程对象t,这就是说,当NewThread对象被实例话的时候,就会启动线程对象t,并调用NewThread对象的run方法。

接下来,在main方法中,我们实例化一个NewThread对象。

public class Program {

    public static void main(String[] args) {
        new NewThread();//NewThread类实例化后,会自动启动线程

        for (int i = 0; i < 5; i++) {
            System.out.println("main thread:"+i);
        }
        System.out.println("Main thread exist");
    }
}

运行结果大致如下(每次都可能不一样):

线程已启动
线程已启动
child thread:0
main thread:0
main thread:1
main thread:2
main thread:3
child thread:1
main thread:4
Main thread exist
child thread:2
child thread:3
child thread:4
child thread exist

从上面的结果中,我们可以看出来,多个线程是以不可知的速度抢占CUP从而运行的,我们无法预料哪个线程先执行哪个线程后执行。从表面看起来,他们是在同时运行。

为什么选择实现Runnable接口而不是扩展Thread类?

文章开头我们给出了两种创建线程的方法,而我选择了第一种。为什么呢?

  • 一个类可以实现很多个接口,但只能扩展(继承)自一个类。
  • 这种方法用的人更多

你可能感兴趣的:(java,se)