原创 Java線程-信號量

Semaphore時一個信號量,它的作用時限制某段代碼的併發數,Semaphore有一個構造函數,可以傳入一個int型整數n,表示某段代碼最多隻有n個線程可以訪問,如果超出了n,那麼請等待,等到某個線程執行完畢這段代碼塊,下一個線

原创 Java線程-障礙器(CyclicBarrier)

Java5當中添加了障礙器,爲了適應一種新的設計需求,比如說一個大型任務,有很多的子任務,只有當子任務都完成了,才能執行主任務,這個時候就需要障礙器。 障礙器是多線程併發控制的一種有效的手段。 示例如下: public class

原创 Java線程-阻塞隊列

阻塞隊列是在隊列基礎上又加了兩個附加操作的隊列,分別爲阻塞插入和阻塞移除。 阻塞插入:隊列滿時,隊列會阻塞插入元素的線程,直到隊列不滿 阻塞移除:隊列空時,獲取元素的線程會等待隊列變爲非空。 一個簡單例子: public clas

原创 Java線程-線程池-延遲連接池

1、指定大小延遲連接池 創建一個可以延遲的連接池子,並且固定大小爲2。如果線程數量超過2,那麼,當前線程就會進入等待狀態,直到其它線程用完之後,再獲得被釋放的池子執行任務。 public class ThreadExtend_Po

原创 Java線程-線程池-原子操作

原子操作是指一個不受其他操作影響的操作任務單元。原子操作是在多線程環境下避免數據不一致必須的手段。 int++並不是一個原子操作,所以當一個線程讀取它的值並加1時,另外一個線程有可能會讀到之前的值,這就會引發錯誤。 爲了解決這個問

原创 JDK1.8新特性 Lambda使用 (二)

Lambda表達式是Java SE 8中一個重要的新特性。lambda表達式允許你通過表達式來代替功能接口。 lambda表達式就和方法一樣,它提供了一個正常的參數列表和一個使用這些參數的主體(body,可以是一個表達式或一個代碼塊)

原创 JDK1.8新特性 深入理解 (一)

1、函數式接口 函數式接口的提出是爲了給Lambda表達式的使用提供更好的支持。 什麼是函數式接口? 簡單來說就是隻定義了一個抽象方法的接口(Object類的public方法除外),就是函數式接口,並且還提供了註解:@Function

原创 JDK1.8新特性 ForkJoin並行流的使用(三)

在jdk1.8新的stream包中針對集合的操作也提供了並行操作流和串行操作流。並行流就是把內容切割成多個數據塊,並且使用多個線程分別處理每個數據塊的內容。Stream api中聲明可以通過parallel()與sequential(

原创 JDK1.8新特性 日期的使用(四)

新的日期API LocalDate | LocalTime | LocalDateTime public class Main { /** * 關於LocalDateTime */ @Test

原创 JDK1.8新特性 optional類的使用(五)

空指針異常是導致Java應用程序失敗的最常見原因。以前,爲了解決空指針異常,Google公司著名的Guava項目引入了Optional類,Guava通過使用檢查空值的方式來防止代碼污染,它鼓勵程序員寫更乾淨的代碼。受到Google G

原创 解決mysql8.0.15“2059 - Authentication plugin 'caching_sha2_password' cannot be loaded”的問題

原來,MySql 8.0.15 換了新的身份驗證插件(caching_sha2_password), 原來的身份驗證插件爲(mysql_native_password)。而客戶端工具Navicat Premium12 中找不到新的身份

原创 第十六章 Spring Cloud GateWay

在上一篇文章當中,大家對Spring Cloud GateWay有了一個初步的認識,網關作爲一個系統的流量入口,有着舉足輕重的作用。 網關的作用: (1)、協議轉換、路由轉發。 (2)、流量控制。 (3)、權限判斷。 (4)、緩存。

原创 Java線程-閉鎖(CountDownLatch)

CountDownLatch有時被稱爲“閉鎖”,其作用相當於一扇門:在CountDownLatch達到結束狀態之前,這扇門一直是關閉的,並且沒有任何線程能通過,當到達結束狀態時,這扇門會打開並允許所有的線程通過。當CountDownL

原创 第十五章 Spring Cloud GateWay 初識

Spring Cloud作爲Spring Cloud官方推薦的第二代框架,取代Zuul網關。網關作爲流量控制,在微服務架構當中有非常重要的作用。網關常用的功能有路由轉發、權限校驗和限流控制等。 本案例來源於官網,在官網的基礎之上進行實

原创 Java線程-異步獲取執行結果(FutureTask)

FutureTask可用於異步獲取執行結果或者取消執行任務的場景,通過傳入Runnable或者Callable的任務給FutureTask,調用run()方法放入線程池,之後通過外部的FutureTask的get()方法獲得結果。Fu