JAVA多线程实现方式主要有两种:继承Thread类、实现Runnable接。
第一种方式:继承Thread类
继承Thread类,要重写run();方法,然后通过调用star()启动该线程.
package myself.test.thread;
public class MyThread extends Thread {
//重写父类中的run()方法
public void run() {
for (int i = 0; i < 5; i++) {
//通过Thread.currentThread().getName()方法可以得到当前执行线程的名称
System.out.println(Thread.currentThread().getName()+"正在执行第"+i+"次");
}
}
public static void main(String[] args) {
//创建我们的线程实例对象
MyThread thread = new MyThread();
//通过setName()方法来指定线程名称
thread.setName("继承Thread类的线程");
//调用start()方法,来启动线程
thread.start();
}
}
输出:继承Thread类的线程正在执行第0次
继承Thread类的线程正在执行第1次
继承Thread类的线程正在执行第2次
继承Thread类的线程正在执行第3次
继承Thread类的线程正在执行第4次
查看Thread类源码,我们会发现,它是实现Runnable接口的.
第二种方式:实现Runnable接口
一般情况下,我们创建线程直接继承Thread类就可以,但当我们的类已经继承了其他类的话(java仅支持单继承),只能通过实现Runnable接口来创建线程了.
package myself.test.thread;
public class RunnableTest {
public static void main(String[] args) {
//创建我们的线程实例对象
RunnableImpl impl = new RunnableImpl();
//通过Thread的构造方法传入我们的线程实例,并指定线程名称
Thread thread = new Thread(impl,"实现Runnable接口的类");
//调用Thread类中start()来启动线程
thread.start();
}
}
class RunnableImpl extends OtherClass implements Runnable{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
//通过Thread.currentThread().getName()方法可以得到当前执行线程的名称
System.out.println(Thread.currentThread().getName()+"正在执行第"+i+"次");
}
}
}
输出:实现Runnable接口的类正在执行第0次
实现Runnable接口的类正在执行第1次
实现Runnable接口的类正在执行第2次
实现Runnable接口的类正在执行第3次
实现Runnable接口的类正在执行第4次
启动该线程的时候我们调用的是Thread类中start()方法,查看源码,我们会发现: