> ### 線程的實現方法
- 實現`Runnable`方法并實現`run()`方法
- 繼承`Thread`方法并重寫`run()`方法
> ### 線程的使用
通過調用`start()`方法啟動線程, 線程會執行`run()`方法里的代碼。
> #### FutureTask
我們都知道,JAVA里面實現線程有兩種方式,但是實現的線程方法都是沒有返回值的,如果我們需要知道線程運行之后的結果,直接繼承Thread或者實現Runnable接口是不行的,JDK還提供了一個Callable接口,可以返回運算結果,但是這個類線程里面沒有構造方法,這里就需要FutureTask接口了
~~~
// 通過new Thread方式執行
FutureTask futureTask = new FutureTask(new Callable(){
public Object call(){ //重寫call方法
return "abc"; // 返回的對象
}
});
new Thread(futureTask).start();
futureTask.get(); // 線程返回結果
~~~
~~~
// 同過線程池執行
ExecutorService service = Executors.newFixedThreadPool(2);
Future<Integer> submit = service.submit(()->{
return 5;
});
System.out.println(submit.get()); // 線程返回結果
~~~
- 2111總結
- 1.面向對象
- 1.0.1 super()與this()的區別
- 1.0.2 private、default、protected、public的訪問范圍
- 1.0.3 continue、break、return區別
- 1.0.4 重載和重寫的區別
- 1.0.5 final的特點
- 1.0.6 抽象類與接口的區別
- 1.0.7 java類型
- 1.0.8 什么是反射
- 1.0.9 類的加載機制
- 1.1.1 jvm內存結構
- 1.1.2 java垃圾回收機制
- 1.1.3 并發問題
- 1.1.3.1 線程的狀態與關系
- 1.1.3.2 并發的三大性質
- 1.1.3.3 線程的實現與使用
- 1.1.3.4 線程池相關
- 1.1.3.5 并發相關方法
- 1.1.3.6 線程相關工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表達式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 動態代理實現
- 2.JavaEE
- 2.0.1 JSP四大作用域九大內置對象
- 2.0.2 cookie與session的區別
- 4.數據庫相關
- 5.git版本管理
- 7.一些問題解決
- 7.1 分布式鎖如何實現