原创 [重識多線程] 01- java多線程創建

一、什麼是線程 進程是代碼在數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,線程則是進程的一個執行路徑,一個進程中至少有一個線程,進程中的多個線程共享進程的資源。 操作系統在分配資源時是把資源分配給進程的,但是CPU

原创 IDEA-Debug高級技巧

IDEA-Debug技巧 idea 至於介紹就看官網就ok了,https://www.jetbrains.com/idea/download/other.html 一、基本用法&快捷鍵 Debug主要對應的是橫向的一條和縱向的一

原创 PicGo + 阿里雲oss搭建個人圖牀工具

取代 七牛雲+Mpic 方案/ PicGo + GitHub 其實我之前是一個資深的Typora用戶,逐步的見證了Typora做的越來越好,之前使用Typora進行記錄的時候,發現了幾個痛點,其中之一最讓人頭疼的就是圖牀,最早的

原创 線程同步與死鎖(3)

線程同步與死鎖 線程同步與死鎖 1、多線程共享數據 2、線程同步 3、實現線程同步的方法 3.1、同步代碼塊 3.2、同步方法 3.3、Lock 4、死鎖 1、多線程共享數據 在多線程操作中,多個線程有可能同時處

原创 Java併發編程:volatile關鍵字解析

摘要:  在 Java 併發編程中,要想使併發程序能夠正確地執行,必須要保證三條原則,即:原子性、可見性和有序性。只要有一條原則沒有被保證,就有可能會導致程序運行不正確。volatile關鍵字 被用來保證可見性,即保證共享變量的內存可見性

原创 鏈表

1、什麼是鏈表 2、鏈表的抽象數據類型 3、爲什麼需要使用鏈表 4、數組的概述 5、鏈表的優點 6、鏈表的缺點 7、單鏈表 7.1、鏈表的基本操作 7.2、鏈表的遍歷 7.3、單鏈表的插入操作 7.3.1、在單鏈表的開頭插入

原创 Java 併發編程:深入理解 ThreadLocal

摘要:   ThreadLocal 又名線程局部變量,是 Java 中一種較爲特殊的線程綁定機制,用於保證變量在不同線程間的隔離性,以方便每個線程處理自己的狀態。進一步地,本文以ThreadLocal類的源碼爲切入點,

原创 雙向鏈表

雙向鏈表的優點:對於鏈表中的一個給定的結點,可以從量方面進行操作。在單向鏈表中,只有獲得結點的前驅結點指針,才能刪除該結點。然而,在雙向鏈表中,即使沒有一個結點的前驅結點的地址,也是可以進行刪除的(因爲每一個結點都有一個指向前驅結

原创 java併發編程:wait和sleep的區別

1:wait()可以指定時間也可以不指定時間,sleep必須指定時間2:在同步中時,對CPU的執行權和鎖的處理不同:wait()釋放CPU的執行權,釋放鎖;sleep()釋放CPU的執行權,但是不釋放鎖

原创 Java併發編程:內置鎖 Synchronized

    在多線程編程中,線程安全問題是一個最爲關鍵的問題,其核心概念就在於正確性,即當多個線程訪問某一共享、可變數據時,始終都不會導致數據破壞以及其他不該出現的結果。而所有的併發模式在解決這個問題時,採用的方案都是序列化訪問臨界資源 。在

原创 java併發編程:線程間通信

摘要:線程與線程之間不是相互獨立的個體,它們彼此之間需要相互通信和協作,最典型的例子就是生產者-消費者問題。本文首先介紹 wait/notify 機制,並對實現該機制的兩種方式——synchronized+wait-notify模式和Lo

原创 從零搭建自己的SpringBoot後臺框架(一)

Hello大家好,本章我們搭建項目基礎框架結構和整合mybatis;項目所需環境jdk1.8,maven,mysql數據庫;開發工具IDEA。有問題可以聯繫我。另求各路大神指點,感謝!一:通過idea工具構建基礎框架 1.  打開idea

原创 接口和抽象類的區別

很多常見的面試題都會出諸如抽象類和接口有什麼區別,什麼情況下會使用抽象類和什麼情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默

原创 java併發編程:之守護線程(Daemon)

在Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護線程) 用個比較通俗的比喻,任何一個守護線程都是整個JVM中所有非守護線程的保姆:只要當前JVM實例中尚存在任何一個非守護線程沒有結束,守護線程就

原创 Java併發編程: ThreadFactory接口用法

線程工廠(ThreadFactory接口)在創建線程的時候,我們當然也能使用工廠模式來生產線程,ThreadFactory是用來實現創建線程的工廠接口,其實它只有一個方法Thread newThread(Runnable r),所以這個接