- 程序
1、自定義線程繼承Thread類
2、重寫run()方法,編寫線程執行體
3、建立線程對象,調用start()方法啟動線程
注意:線程開啟不一定立即執行,由cpu排程執行,
定義MyRunnable類實作Runnable接口,
實作run()方法,編寫線程執行體
建立線程對象,調用start()方法啟動線程
小結:
繼承Thread類:
1.子類繼承Thread類具有多線程能力
2.啟動線程:子類對象.start()
3.不建議使用,避免OOP單繼承局限性
實作Runnable接口
1.實作Runnable接口具有多線程能力
2.啟動線程:傳入線程對象+目标對象.start()
3.推薦使用,避免單繼承局限性,靈活友善,友善同一個對象被多個線程使用
實作Callable接口(了解即可)
1.實作Callable接口,需要傳回值類型
2.重寫call方法,需要抛出異常
3.建立目标對象
4.建立執行服務:ExecutorService ser = Executors.newFixedThreadPool(1);
5.送出執行:Future<Boolean>result1=ser.submit(t1)
6.擷取結果:boolean r1=result1.get();
7.關閉服務:ser.shutDownNow();
- 線程并發
多個線程操作同一個資源的情況下,線程不安全,資料易發生紊亂;
靜态代理模式總結:
1、真實對象和代理對象都要實作同一個接口
2、代理對象要代理真是角色
好處:
1、代理對象可以做很多真實對象做不了的事情
2、真實對象專注做自己的事情
- Lamda表達式
為什麼要使用Lamda表達式:避免匿名内部類定義過多,去掉沒有意義的代碼隻留下核心的邏輯
函數式接口:任何接口,如果隻包含唯一一個抽象方法,那麼它就是一個函數式接口;對于函數式接口,我們可以通過Lamda表達式來建立該接口的對象
推導Lamda接口表達式:
1、定義一個函數式接口
簡化:
1、參數類型
2、簡化括号
2、去掉花括号
總結:lambda表達式隻有一行代碼的情況下才能簡化成為一行,如果有多行,那就用代碼塊包裹前提是接口是函數式接口
多個參數也可以去掉參數類型,要去掉就都去掉,必須加上括号