原创 數據結構與算法(一)基礎概念

基礎概念數據結構討論的範疇,算法、數據結構概念,算法和算法的度量算法討論的範疇算法:處理問題的策略。數據結構:問題的數學模型(非數值計算)及其上的操作在計算機中的表示和實現。數值計算使用計算數學。數據結構算法:處理問題的策略。數據結構:帶結

原创 JAVA多線程(六)模式-Balking

Balking 多線程共享一個資源,該資源發現無法提供服務則拒絕接受請求,請求將失敗而不是繼續等待資源。 適用環境 對共享資源的請求是可被拒絕、不需要等待的。 樣例 秒殺

原创 JAVA多線程(三)模式-Single Threaded Execution

Single Threaded Executio 同時只允許一個線程使用資源。 多線程共享一個資源,僅允許獲得了資源鎖的線程對資源的訪問,避免多線程訪問資源造成衝突。 適用環境 多線程

原创 JAVA多線程(十四)模式-Active Object

Active Object通過代理接口,將生產、緩存、消費場景中緩存、消費與生產部分獨立出來,通過future模式返回操作結果給生產部分。緩存部分通過增加調度器來分配數據到執行者,這裏可以讓執行者由主動切換到被動。可以分離線程和執行策略。可

原创 JAVA多線程(十一)模式-Future

Future在需要的時候,獲取線程結果。適用環境需要在多線程環境下,同步或異步的獲取執行結果。樣例調用者將獲取結果的任務委託給一箇中間類,調用者和任務線程同時持有該類實例。調用者需要獲取結果時,調用中間類的方法,如果此時結果還未到達,可以在

原创 JVM(三)——類結構與類加載器

類文件結構 class文件是一個8位的字節流。所有16、32、64位數據以連續的數個8位,以big-endian形式存儲。 Class文件中數據類型 u1、u2、u4代表無符號1、2、4字節數據。 0……*類

原创 JAVA多線程(二)構建線程安全的類

構建線程安全的類 volatile 只保證數據可見性,不保證數據同步。也就是說,JVM只保證使用了volatile的數據變更後對所有線程暴露最新值,並不會對線程內部緩存數據的操作多限制。多線程同時變更某個共享的

原创 JAVA多線程(四)模式-Immutable

Immutable 多線程共享一個資源,該資源本身是不可變的,所以可以被安全的共享。 適用環境 共享不需要動態變更的資源的時候,比如一些固定的計算參數。 樣例 郵遞員看門

原创 JVM(二)——GC

引用類型 強引用:類似Object o=new Object()這種引用。只要強引用還存在,對象不會被回收。 軟引用:對於軟引用關聯的對象,在系統將要發生內存溢出前,會被納入回收範圍,並進行第二次回收。 弱

原创 JAVA多線程(五)模式-Guarded Suspension

Guarded Suspension 多線程共享一個資源,該資源的使用是有條件的。 適用環境 共享資源的佔用是有條件而非直接佔用的。 樣例 幼教收作業:仨熊孩子倆幼教,倆幼

原创 JAVA多線程(一)線程安全問題產生的原因

JAVA線程內存與主存間映射示意圖 Java內存模型中規定了所有的變量都存儲在主內存中,每條線程還有自己的工作內存,線程的工作內存中保存了該線程使用的變量到主內存副本拷貝,線程對變量的所有操作(讀取、賦值)都必須在工作內存

原创 JVM(一)——JMM

JMM示意圖 運行時數據區 線程私有 程序計數器 一塊較小空間,可以看做是線程所執行字節碼的行號指示器。 字節碼解釋器通過計數器的值來獲取嚇一條需執行的字節碼指令,分支、循環、跳轉、異常處

原创 JAVA多線程(十)模式-Work Thread和階段總結

Worker Thread有工作來就處理,沒工作就等待。相當於生產者消費者中緩存和消費者部分,其中消費者部分採用池化策略。適用環境線程池。樣例略階段總結從之前的模式來看,面對的場景可以說是生產-共享資源-請求拋棄策略-消費問題,只不過每個模

原创 JAVA多線程(七)模式-Producer Consumer

Producer Consumer 生產者創建數據,通過中介控制流量並安全傳遞給消費者。 適用環境 生產者生產數據的速度與消費者處理數據的速度不一致,中介者通過緩存和阻塞對消費者的數據壓力進行調整。

原创 JAVA多線程(十二)模式-Two Phase Termination

Two Phase Termination顯示調用資源清理方法,清理結束後正式關閉。適用環境需要在線程正式結束前清理資源。樣例在線程的循環執行方法中檢查終止狀態,如果爲真(或者運行中發生錯誤),退出循環體,進而執行循環體外finally部分