1) 继承Thread类
class MyTask01 extends Thread{
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println("MyTask01 ... run()...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
Thread thread = new MyTask01();
thread.start();
}
}
2) 实现Runnable接口
class MyTask02 implements Runnable {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println("MyTask02 ... run()...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
Thread thread = new Thread(new MyTask02());
thread.start();
}
}
3) FutureTask 接口
![Futrue继承及实现关系](https://i-blog.csdnimg.cn/blog_migrate/3c9026f09ed1bb947aa6dbbac7c65c38.png)
class MyTask03 implements Callable<String> {
@Override
public String call() throws Exception {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println("MyTask03 ... call()...");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "retString";
}
}
public class ThreadDemo {
public static void main(String[] args) throws Exception {
FutureTask<String> futureTask = new FutureTask<>(new MyTask03());
Thread thread = new Thread(futureTask);
thread.start();
String ret = futureTask.get();
System.out.println(ret);
}
}
4)ThreadPoolExecutor线程池
public class ThreadDemo {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
try {
Future<String> submitRunnable = executorService.submit(new MyTask02(), "default");
System.out.println(submitRunnable.get());
Future<String> submitCallable = executorService.submit(new MyTask03());
System.out.println(submitCallable.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
executorService.shutdown();
}
}
}
5) CompletableFuture组合式异步编程
public class ThreadDemo {
public static void main(String[] args) throws Exception {
CompletableFuture.runAsync(() -> {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println("CompletableFuture ... runAsync()...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).get();
CompletableFuture.supplyAsync(() -> {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println("CompletableFuture ... supplyAsync()...");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "retString";
}).get();
}
}