多執行緒理解
繼承Thread類
-
子類繼承Thread類具備多執行緒能力
-
啟動執行緒:子類物件.start()
-
不建議使用:避免oop單繼承局限性
實作Runnable介面
-
實作介面Runnable具有多執行緒能力
-
啟動執行緒:傳入目標物件+Thread物件.start()
-
推薦使用:避免單繼承局限性,可能一個物件被多個執行緒使用
多個執行緒同時操作同一個物件
問題:多個執行緒操作同一個資源,可能會出現資源沖突問題
實作Callable介面
-
實作Callable介面,需要回傳值型別
-
重寫call方法,需要拋出例外
-
創建目標物件
-
創建執行服務
-
提交執行
-
獲取結果
-
關閉服務
靜態代理
抽象角色:宣告真實物件和代理物件的共同介面,
代理角色:代理物件角色內部含有對真實物件的參考,從而可以操作真實物件,同時代理物件提供與真實物件相同的介面以便在任何時刻都能夠代替真實物件,
同時,代理物件可以在執行真實物件操作時,附加其他的操作,相當于對真實物件進行封裝,
真實角色:代理角色所代表的真實物件,是我們最終要參考的物件,
Lamda運算式
學習前提:
為什么使用
-
避免匿名內部類定義過多
-
可以使代碼更簡潔
-
去掉無意義代碼,留下核心邏輯
理解函式式介面
定義:只包含唯一一個抽象方法的介面,如:
public interface Runnable{
public abstract void run();
}
對于函式式介面,我們可以通過lamda運算式來創建該介面的物件,
推導邏輯:
package JavaText.Text;
?
public class LamdaTest {
//3.靜態內部類
static class like2 implements ILike{
public void lamda(){
System.out.println("I like lamda2");
}
}
?
?
public static void main(String[] args) {
ILike like = new like();
like.lamda();
?
like2 like2=new like2();
like2.lamda();
?
//4.區域內部類
class like3 implements ILike{
public void lamda(){
System.out.println("I like lamda3");
}
}
like = new like3();
like.lamda();
?
//5.匿名內部類,沒有類的名稱,必須借助介面或父類
like =new ILike(){
@Override
public void lamda(){
System.out.println("I like lamda4");
}
};
like.lamda();
?
//6.lamda運算式
like=()->{
System.out.println("I like lamda5");
};
like.lamda();
?
?
?
}
}
//1.定義一個函式式介面
interface ILike{
void lamda();
}
?
//2.常用類
class like implements ILike{
public void lamda(){
System.out.println("I like lamda1");
}
}
Lamda運算式其實就是省略掉那些唯一不可變的東西,如在這一段代碼當中:
//5.匿名內部類,沒有類的名稱,必須借助介面或父類
like =new ILike(){
@Override
public void lamda(){
System.out.println("I like lamda4");
}
};
like.lamda();
?
//6.lamda運算式
like=()->{
System.out.println("I like lamda5");
};
like.lamda();
----
new ILike(){
@Override
public void lamda(),括號之前的代碼都是唯一不可變的,因此可以省略,而括號之后的代碼是自己定義的因此保留括號以后的代碼在加上->即可,
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538303.html
標籤:Java
上一篇:java基礎——二維陣列基本概念
下一篇:day23-服務器端渲染技術01
