一、通过继承Thread类定义的线程类
代码示例:
/**
* @author lvxinchun
* @Description 通过继承Thread类定义的线程类
* @Date 2021/1/25 17:17
* @Version V1.0
*/
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("执行MyThread");
}
public static void main(String[] args) {
new MyThread().start();
}
}
运行结果:执行MyThread
二、通过实现Runnable接口定义的线程类
代码示例:
/**
* @author lvxinchun
* @Description 通过实现Runnable接口定义的线程类
* @Date 2021/1/25 17:18
* @Version V1.0
*/
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("执行MyRunnable");
}
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
执行结果:执行MyRunnable
三、通过Callable和Future接口创建线程
从JAVA5开始,JAVA提供提供了Callable接口,该接口是Runnable接口的增强版,Callable接口提供了一个call()方法可以作为线程执行体,但call()方法比run()方法功能更强大,call()方法的功能的强大体现在:
- call()方法可以有返回值
- call()方法可以声明抛出异常
JAVA5提供了Future接口来代表Callable接口里call()方法的返回值,并为Future接口提供了一个FutureTask实现类,该类实现了Future接口,并实现了Runnable接口。
代码示例:
/**
* @author lvxinchun
* @Description 通过Callable和Future接口创建线程
* @Date 2021/1/25 17:19
* @Version V1.0
*/
public class CallableThread implements Callable {
@Override
public String call() throws Exception {
return "CallableThread";
}
public static void main(String[] args) {
CallableThread callableThread = new CallableThread();
FutureTask<String> futureTask = new FutureTask<String>(callableThread);
Thread thread = new Thread(futureTask);
thread.start();
try {
System.out.println(futureTask.get());
} catch (InterruptedException e) {
} catch (ExecutionException e) {
}
}
}
运行结果:CallableThread