Appearance
1.继承Thread
- 优点:代码编写最简单直接操作
- 缺点:没返回值,继承一个类后,没法继承其他的类,拓展性差
java
public class test1 {
public static void main(String[] args) {
MyTask task = new MyTask();
task.setName("task demo");
task.start();
System.out.println("主线程名称:" + Thread.currentThread().getName());
}
static class MyTask extends Thread {
@Override
public void run() {
System.out.println("继承Thread实现多线程,名称:" + Thread.currentThread().getName());
}
}
}
2.实现Runnable
- 优点:线程类可以实现多个几接口,可以再继承一个类
- 缺点:没返回值,不能直接启动,需要通过构造一个Thread实例传递进去启动
java
public class test1 {
public static void main(String[] args) {
MyTask task = new MyTask();
Thread thread = new Thread(task);
thread.setName("task demo");
thread.start();
System.out.println("主线程名称:" + Thread.currentThread().getName());
}
static class MyTask implements Runnable {
@Override
public void run() {
System.out.println("继承Thread实现多线程,名称:" + Thread.currentThread().getName());
}
}
}
3.使用Callable和FutureTask
Future是一个接口,代表了一个异步执行的结果。接口中的方法用来检查执行是否完成、等待完成和得到执行的结果。当执行完成后,只能通过get()方法得到结果,get方法会阻塞直到结果准备好了。如果想取消,那么调用cancel()方法。
java
public class test1 {
public static void main(String[] args) {
// 1.创建自己定义的MyTask对象
MyTask task = new MyTask();
// 2.创建FutureTask
FutureTask<String> futureTask = new FutureTask<>(task);
// 3.创建线程启动
Thread thread = new Thread(futureTask);
thread.setName("task demo");
thread.start();
System.out.println("主线程名称:" + Thread.currentThread().getName());
}
static class MyTask implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("通过Callable实现多线程,名称:" + Thread.currentThread().getName());
return "这是返回值";
}
}
}
4.使用线程池
创建一个固定容量为3的线程池
java
public class test1 {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
for(int i=0;i<10;i++){
executorService.execute(new MyTask());
}
System.out.println("主线程名称:" + Thread.currentThread().getName());
}
static class MyTask implements Runnable {
@Override
public void run() {
System.out.println("继承Thread实现多线程,名称:" + Thread.currentThread().getName());
}
}
}
观测控制台输出情况
html
主线程名称:main
继承Thread实现多线程,名称:pool-1-thread-3
继承Thread实现多线程,名称:pool-1-thread-2
继承Thread实现多线程,名称:pool-1-thread-1
继承Thread实现多线程,名称:pool-1-thread-3
继承Thread实现多线程,名称:pool-1-thread-2
继承Thread实现多线程,名称:pool-1-thread-3
继承Thread实现多线程,名称:pool-1-thread-1
继承Thread实现多线程,名称:pool-1-thread-3
继承Thread实现多线程,名称:pool-1-thread-2
继承Thread实现多线程,名称:pool-1-thread-1