java常见的创建线程的方式有三种,进阶一点还可以采用线程池进行创建,但是本质上是一样的。
基础的创建线程通常继承Thread类,实现Runnable和Callable接口的方式也是通过实现类对象作为Thread构造方法的参数的形式进行使用。
三种方法的主要特点:
Thread 类,只能单继承
Runnable接口,可以多实现
Callable接口,可以多实现,并且可以抛出异常 和有 返回值
1. 继承类Thread
public class MyThread extends Thread { @Override public void run() { super.run(); System.out.println("通过继承Thread创建的线程,线程名称为:" + Thread.currentThread().getName()); System.out.println("通过继承Thread创建的线程,线程名称为:" + this.getName()); } }
调用方式:
MyThread myThread = new MyThread(); myThread.setName("thread"); myThread.start();
2. 实现接口Runnable
Runnable接口截图:
实现Runnable接口:
package com.ahd.study; public class MyRunnable implements Runnable { @Override public void run() { System.out.println("通过实现Runnable接口创建的线程,线程名称为:" + Thread.currentThread().getName()); } }
调用:
MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.setName("runnable"); thread.start();
3. 实现接口Callable(callable实现了Runnable接口)
Callable接口截图:
实现Callable类:
package com.ahd.study; import java.util.concurrent.Callable; public class MyCallable implements Callable{ @Override public Object call() throws Exception { System.out.println("通过实现Callable创建的线程,线程名称为:" + Thread.currentThread().getName()); return null; } }
调用:
MyCallable myCallable = new MyCallable(); FutureTask task = new FutureTask(myCallable); Thread thread1 = new Thread(task); thread1.setName("callable"); thread1.start();