Java创建线程的方式有两种
①继承Thread类重写run()方法
/**
* Created by hewenhao on 2020/5/12
* Description 线程创建方式-:继承Thread类,重写run()方法
*/
public class ExtendsThread extends Thread{
@Override
public void run() {
System.out.println("线程id:" + Thread.currentThread().getId() + ",线程名:" + Thread.currentThread().getName());
}
public static void main(String[] args) {
System.out.println(String.format("主线程id:%s,主线程名:%s", Thread.currentThread().getId(), Thread.currentThread().getName()));
ExtendsThread thread1 = new ExtendsThread();
thread1.start();
ExtendsThread thread2 = new ExtendsThread();
thread2.run();
}
}
运行结果:
主线程id:1,主线程名:main
线程id:1,线程名:main
线程id:9,线程名:Thread-0
Process finished with exit code 0
从结果可以看出:
线程的启动必须要调用线程类的start()方法,让线程进入可执行的状态,线程类的run()方法只是一个普通的方法,单独调用是不会新起线程的。从两个线程的运行结果来看,新建的线程不会阻塞主线程的执行。
②实现Runnable接口实现run()方法
/**
* Created by hewenhao on 2020/5/12
* Description 线程创建方式-:实现Runnable接口,实现run()方法
*/
public class ImplementRunnable implements Runnable{
@Override
public void run() {
System.out.println(String.format("线程id:%s,线程名:%s", Thread.currentThread().getId(), Thread.currentThread().getName()));
}
public static void main(String[] args) {
System.out.println(String.format("主线程id:%s,主线程名:%s", Thread.currentThread().getId(), Thread.currentThread().getName()));
Thread thread1 = new Thread(new ImplementRunnable());
thread1.start();
Thread thread2 = new Thread(new ImplementRunnable());
thread2.run();
}
}
运行结果:
主线程id:1,主线程名:main
线程id:1,线程名:main
线程id:9,线程名:Thread-0
Process finished with exit code 0
实现runnable接口的run()方法,新建线程还是需要new一个Thread类,通过Thread类的构造方法新起线程
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
两种线程的创建方式都可以使用,使用接口实现的方式可以避免java单继承的问题,在继承了父类的同时,可以实现多线程的功能
原文链接:http://www.cnblogs.com/dolphin0520/p/3913517.html