一、Java创建多线程的两种方式
- 继承Thread类
- 实现Runnable接口
两种方法都需要重写run()方法之后调用start()方法让线程进入准备状态。(具体执行时间由cpu调度,start()方法并非真正的执行方法)。
继承Thread类
Thread类本身也是实现了Runnable接口,重写了run()方法,Thread类可直接实例化线程对象
package test;
import org.junit.Test;
/**
* @ClassName: test1
* @Description: TODO
* @Author: JL
* @Date: 2019/2/18 17:46
* @Version 1.0
*/
public class test1 {
@Test
public void test(){
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
class ThreadTest extends Thread{
//继承Thread类,重写run()方法
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行Start");
System.out.println(Thread.currentThread().getName()+"执行End");
}
}
}
实现Runnable接口
实例化Runnable接口的实现类对象,作为Thread类的构造器参数生成线程对象。
@Test
public void t2(){
ThreadTest1 runnable = new ThreadTest1();
new Thread(runnable).start();
new Thread(runnable).start();
new Thread(runnable).start();
new Thread(runnable).start();
new Thread(runnable).start();
}
class ThreadTest1 implements Runnable{
//实现Runnable接口,实现run()方法
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行Start");
System.out.println(Thread.currentThread().getName()+"执行End");
}
}
总结:java中存在单继承、多实现的特性,所以我们在开发过程中尽量使用实现Runnable接口,而非继承Thread类。