java实现多线程的4种方式
1、繼承Thread類
看jdk源碼可以發現,Thread類其實是實現了Runnable接口的一個實例,繼承Thread類后需要重寫run方法并通過start方法啟動線程。?
繼承Thread類耦合性太強了,因為java只能單繼承,所以不利于擴展。?
2、實現Runnable接口?
通過實現Runnable接口并重寫run方法,并把Runnable實例傳給Thread對象,Thread的start方法調用run方法再通過調用Runnable實例的run方法啟動線程。?
所以如果一個類繼承了另外一個父類,此時要實現多線程就不能通過繼承Thread的類實現。?
3、實現Callable接口?
通過實現Callable接口并重寫call方法,并把Callable實例傳給FutureTask對象,再把FutureTask對象傳給Thread對象。它與Thread、Runnable最大的不同是Callable能返回一個異步處理的結果Future對象并能拋出異常,而其他兩種不能。
| public class ThreadDemo3 { Thread t = new Thread(oneTask); System.out.println(Thread.currentThread().getName()); t.start(); //重寫call方法 } |
?
4.通過線程池創建線程
ExecutorService executor = Executors.newCachedThreadPool();//ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Boolean> task = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
try {
//todo business code......
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
};
try {
executor.submit(task);
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
轉載于:https://www.cnblogs.com/hipphappy/p/10792815.html
總結
以上是生活随笔為你收集整理的java实现多线程的4种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark学习之Spark Stream
- 下一篇: Educational Round 64