两种方法:

1、创建一个继承自Thread的线程类,然后再main(不限)中构造这个线程类对象。方法在之前讲过。

2、创建一个使用Runnable接口的线程类,然后在main(不限)中构造这个Runnable线程类,再通过构造Thread类,把线程类传入即可。

实例:

线程类(使用Runnable接口):

public class Runnable_Test002 implements Runnable{
    @Override
    public void run() {

    }
}

main方法中调用:

Runnable_Test002 trs = new Runnable_Test002();
Thread trs1 = new Thread(trs);
trs1.start();

我们还可以多次构造Thread,引入同一个Runnable对象(trs),这样可以做到多线程计算同一道题的效果。


两种方法比较:

使用Runnable还可以继承其他类。

Runnable可以非常方便的实现多线程的数据的共享。

如此一来,你就可以创建多个线程处理同一个问题,并且共享进度。


匿名内部类创建线程:

目的就是简化一下代码,看起来不那么臃肿而已。

1-Runnable的匿名内部类

我们先来看看是怎么做的,我们只需要在main中写:

Runnable r1 = new Runnable(){
    @Override
    public void run() {
        while(true)
            System.out.println(Thread.currentThread().getName());
    }

};
Thread t = new Thread(r1,"匿名内部类:");
t.start();

即可。或者将最后两行改写为:

new Thread(r1,"匿名内部类:").start();

化简代码。还可以使用Lambda匿名函数简化构造函数的代码:

Runnable r1 = () -> {
    while(true)
        System.out.println(Thread.currentThread().getName());
};

最终的效果:

Runnable r1 = () -> {
    while(true)
        System.out.println(Thread.currentThread().getName());
};
new Thread(r1,"匿名内部类:").start();

2-Thread的匿名内部类 

Thread t1 = new Thread() {
    @Override
    public void run() {
        while(true)
            System.out.println(Thread.currentThread().getName());
    }
};
t1.start();

 如果连t1后续也不需要操作了,那么可以把t1也“匿名”了。

new Thread() {
    @Override
    public void run() {
        while(true)
            System.out.println(Thread.currentThread().getName());
    }
}.start();

 还可以使用Lambda再做简化:

new Thread(() -> {
    while(true)
        System.out.println(Thread.currentThread().getName());
}).start();