1. Java创建线程的方式
发布于 2022年 01月 20日 01:37
package org.copico.study.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 创建线程的方式
*/
public class Thread01Create {
public static void main(String[] args) throws ExecutionException, InterruptedException {
new MyThread1().start();
new Thread(new MyThread2()).start();
FutureTask<String> ft = new FutureTask<>(new MyThread3());
new Thread(ft).start();
System.out.println(ft.get());
new Thread() {
@Override
public void run() {
System.out.println("启动-匿名内部类方式创建线程");
}
}.start();
new Thread(() -> System.out.println("启动-Java8方式创建线程")).start();
FutureTask<Integer> ft2 = new FutureTask<>(() -> {
System.out.println("Java8简写方式FutureTask");
return 1;
});
new Thread(ft2).start();
System.out.println(ft2.get());
}
}
/**
* 继承Thread方式
*/
class MyThread1 extends Thread {
@Override
public void run() {
System.out.println("启动-继承Thread方式创建线程");
}
}
/**
* 实现Runnable
* 在Thread中有个名为target的Runnable成员变量
* private Runnable target;
* 而Thread中的run方法如下所示
* public void run() {
* if (target != null) {
* target.run();
* }
* }
* Runnable优势:
* Runnable更容易与线程池等高级API配合
* Runnable让任务类脱离了Thread继承体系,更灵活
*/
class MyThread2 implements Runnable {
@Override
public void run() {
System.out.println("启动-实现Runnable方式创建线程");
}
}
class MyThread3 implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("启动-实现Callable方式创建线程");
return "123";
}
}