Java——多線程:Lamda表達式

来源:https://www.cnblogs.com/xiaowangaixuexi/archive/2022/11/24/16922975.html
-Advertisement-
Play Games

多線程理解 繼承Thread類 子類繼承Thread類具備多線程能力 啟動線程:子類對象.start() 不建議使用:避免oop單繼承局限性 實現Runnable介面 實現介面Runnable具有多線程能力 啟動線程:傳入目標對象+Thread對象.start() 推薦使用:避免單繼承局限性,可能一 ...


多線程理解

繼承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(),括弧之前的代碼都是唯一不可變的,因此可以省略,而括弧之後的代碼是自己定義的因此保留括弧以後的代碼在加上->即可。
​

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 現在 uniapp 開發的實時音視頻聊天類的 APP 大部分都要在 nvue 頁面上進行開發。雖然 nvue 與 vue 的區別不是很大,但還是有所差異的。 仔細查看了 uniapp 官網,發現了可以使用原生子窗體進行開發,可以把整個視頻 ...
  • 要成為一名優秀的 Web 開發人員,最快的方法就是練習。一個很好的練習方法是儘可能多地構建初學者項目。那是因為每個項目都會提出一個獨特的問題和解決方案,因此您解決的項目越多,您獲得的知識就越多。將您完成的每個項目都視為您獲得的獎牌。您擁有的獎牌越多,您就越能準備好應對下一個難度更大的項目。 為了幫助 ...
  • 個人名片: 對人間的熱愛與歌頌,可抵歲月冗長:sun_with_face: Github👨🏻‍💻:念舒_C.ying CSDN主頁✏️:念舒_C.ying 個人博客:earth_asia: :念舒_C.ying 預覽圖 直接進入我的網站吧 >> Z_C戀愛日記 下載源碼 鏈接:https:// ...
  • 在vue2中,提供了provide和inject配置,可以讓開發者在高層組件中註入數據,然後在後代組件中使用 除了相容vue2的配置式註入,vue3在composition api 中添加了provide和inject方法,可以在setup函數中註入 和使用數據 基本使用 provide('key' ...
  • 自定義 封裝單列模式! global state 由於vue3的響應式系統本身可以脫離組件而存在,因此可以充分利用這一點,輕鬆製造多個全局響應式數據, 並且通過和vuex一樣 通過某個模塊指定方法修改數據,不能直接修改數據,並且讓數據成為全局響應式 並且在代碼體積上絕對的輕量級!比市面上的任何第三方 ...
  • 一.小結 1.程式模塊化和可重用性是軟體工程的中心目標之一。java提供了很多有助於完成這一目標的有效結構。方法就是一個這樣的結構。 2.方法指定方法的修飾符,返回值類型,方法名和參數。比如靜態修飾符static。 3.方法可以返回一個值。返回值類型returnValueType是方法要返回的值數據 ...
  • 伺服器端渲染技術01 為什麼需要jsp? 在之前的開發過程中,我們可以發現servlet做界面非常不方便: 引出jsp技術=> jsp=html+java代碼+標簽+javascript+css 1.JSP基本介紹 JSP全稱是Java Server Pages,Java的伺服器頁面,就是伺服器端渲 ...
  • 目錄 一.OpenGL 褐色 1.IOS Object-C 版本 1.Windows OpenGL ES 版本 2.Windows OpenGL 版本 二.OpenGL 褐色 GLSL Shader 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> Op ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...