原创 Spring Boot 將web項目打包成jar運行

1. 在src/main文件夾下創建webapp文件夾,將前端源碼放入webapp下(並將webapp文件夾exclude掉,避免idea無法加載項目) 2. pom添加以下代碼,使用maven管理前端項目

原创 【高併發Java五】JDK併發包1

在[高併發Java 二] 多線程基礎中,我們已經初步提到了基本的線程同步操作。這次要提到的是在併發包中的同步控制工具。 1. 各種同步控制工具的使用 1.1 ReentrantLock  ReentrantLock感覺上是synchr

原创 【高併發Java七】併發設計模式

1. 什麼是設計模式 在軟件工程中,設計模式(design pattern)是對軟件設計中普遍存在(反覆出現)的各種問題 ,所提出的解決方案。這個術語是由埃裏希·伽瑪(Erich Gamma)等人在1990年代從建築設計領 域引入到計算

原创 【高併發Java三】Java內存模型和線程安全

網上很多資料在描述Java內存模型的時候,都會介紹有一個主存,然後每個工作線程有自己的工作內存。數據在主存中會有一份,在工作內存中也有一份。工作內存和主存之間會有各種原子操作去進行同步。 下圖來源於這篇Blog 但是由於Java版本

原创 【高併發Java一】前言

1、關於高併發的幾個重要概念 1.1 同步和異步 首先這裏說的同步和異步是指函數/方法調用方面。 很明顯,同步調用會等待方法的返回,異步調用會瞬間返回,但是異步調用瞬間返回並不代表你的任務就完成了,他會在後臺起個線程繼續進行任務

原创 【高併發java二】多線程基礎

1. 什麼是線程 線程是進程內的執行單元 某個進程當中都有若干個線程。 線程是進程內的執行單元。 使用線程的原因是,進程的切換是非常重量級的操作,非常消耗資源。如果使用多進程,那麼併發數相對來說不會很高。而線程是更細小的調度單元

原创 【高併發Java六】JDK併發包2

1. 線程池的基本使用 1.1.爲什麼需要線程池 平時的業務中,如果要使用多線程,那麼我們會在業務開始前創建線程,業務結束後,銷燬線程。但是對於業務來說,線程的創建和銷燬是與業務本身無關的,只關心線程所執行的任務。因此希望把儘可能多

原创 java學習筆記

java多線程編程 進程和線程 Java給多線程編程提供了內置的支持。一個多線程程序包含兩個或多個能併發運行的部分。程序的每一部分都稱作一個線程,並且每個線程定義了一個獨立的執行路徑。 多線程是多任務的一種特別的形式,但多線程使用了更小

原创 JAVA虛擬機

一、Java虛擬機的生命週期:   Java虛擬機的生命週期 一個運行中的Java虛擬機有着一個清晰的任務:執行Java程序。程序開始執行時他才運行,程序結束時他就停止。你在同一臺機器上運行三個程序,就會有三個運行中的Java虛擬

原创 Spring筆記

Spring框架的7個模塊 核心容器:核心容器提供Spring框架的基本功能,主要組件是BeanFactory,是工廠模式的實現,BeanFactory使用控制反轉模式將應用程序的配置和依賴性規範與實際應用程序代碼分開 Spring

原创 【高併發Java四】無鎖

在[高併發Java 一] 前言中已經提到了無鎖的概念,由於在jdk源碼中有大量的無鎖應用,所以在這裏介紹下無鎖。 1 無鎖類的原理詳解 1.1 CAS CAS算法的過程是這樣:它包含3個參數CAS(V,E,N)。V表示要更新的變

原创 Redis

Redis是線程安全的(因爲是單線程),所有操作都是原子的,不會因併發產生數據異常 Redis速度非常快(因爲使用非阻塞式IO,大部分命令的算法時間複雜度是O(1)) Redis採用-key-value型的基本數據結構 不要使用過長的K

原创 java筆記

1.相同對象的hashcode一定相同,但相同的hashcode不一定是相同的對象。 2.深複製和淺複製 淺複製:被複制對象的所有變量都含有與原來對象相同的值,而所有的對其他對象的引用任然指向原來的對象,淺複製僅僅考慮複製的對象,不復制

原创 java學習筆記

1.相同對象的hashcode一定相同,但相同的hashcode不一定是相同的對象。 2.深複製和淺複製 淺複製:被複制對象的所有變量都含有與原來對象相同的值,而所有的對其他對象的引用任然指向原來的對象,淺複製僅僅考慮複製的對象,不復

原创 Java多線程源碼

單線程程序 public static void main(String args[]) { System.out.println("輸出從1到100的數:"); for (int i = 0; i < 100; i ++)