1 方式一:创建Thread的子类对象
1-1 创建一个线程,继承 Thread,重写run方法
public class MyThread extends Thread{
    public MyThread(String name){
        super(name);
    }
    @Override
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+i);
        }
    }
}
1-2 测试类
public class test2 {
    public static void main(String[] args) {
        MyThread t1 = new MyThread("线程1");
        for (int i = 0; i < 100; i++) {
            System.out.println("线程2"+i);
        }
        t1.start();
    }
}
2 方式二:实现 Runnable接口
2-1 编写类,实现Runnable接口
public class MyThread implements Runnable{
    @Override
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}
测试
public class test2 {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        Thread t1 = new Thread(myThread, "线程1");
        t1.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("helloworld");
        }
    }
}
3 通过线程池创建多线程
编写类,实现Runnable接口
public class MyThread implements Runnable{
    @Override
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}
创建线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class test2 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        MyThread myThread = new MyThread();
        executorService.submit(myThread);
        executorService.submit(myThread);
        executorService.submit(myThread);
    }
}
来源:https://www.cnblogs.com/hellosiyu/p/12482913.html