原创 interrupt能關閉一個線程嗎?

線程的生命週期管理API中,沒有搶佔式的關閉方式。早期,jdk有stop方法可以直接中斷線程的運行。但是這種方式,對程序來說並不友好。哪裏不友好呢?oralce的官網上,給了詳細的說明 爲什麼stop方法過時了? 簡單翻譯一下:其

原创 Spring整合RabbitMQ

Spring實戰4介紹了AMQP消息高級協議。進而提到了AMQP協議的實現——RabbitMQ。 RabbitMQ作爲一個消息代理中間件。非常的流行,exchange的使用,讓消息生產者和消息隊列實現瞭解耦。提供了多種消息路由的方

原创 SpringMVC整合thymeleaf

jsp作爲前端渲染的技術,穩坐多年的霸主地位。但是,衆所周知,jsp是強依賴servlet規範的, 並且頁面中耦合了很多jstl的標籤。極其難以維護。在這期間,出現了很多前端渲染的框架,挑戰jsp的地位。thymyleaf是其中佼

原创 springboot使用spring.profiles.active搭配@Profile註解失效問題

好久沒寫博客了,出來冒個泡。 我搭建了一個springboot的測試環境,想着用spring的profiles屬性區分開生產bean和開發bean。 application.properties的配置如下: 2個java類如下:

原创 單例模式的實現

實現單例模式,捋了捋,一共有4種方式吧 餓漢模式 懶漢模式 靜態內部類模式 枚舉(重點) 餓漢模式 類加載時就創建好單例對象 如: 很明顯,這種方式無法實現定製化的需求,而且沒有使用需求時,直接加載,會浪費性能。 懶漢模式 如:

原创 synchronized是可重入鎖嗎,及其實現原理?

先說答案吧! synchronized是可重入鎖。 簡單點說,可重入鎖是:同一個線程重複請求由自己持有的鎖對象時,可以請求成功而不會發生死鎖。 在網上看見一個例子,感覺不錯。我自己試了一下,可以證明synchronized是可重入

原创 HashMap的擴容

之前也研究過HashMap的源碼,但是對擴容這塊沒有做過深入的研究。這幾天,抽時間看了一下HashMap的resize的源碼 文章將從下面幾個方面對resize方法進行解析 1 .何時resize 2 .resize的具體過程 先

原创 使用visual提升Idea的啓動速度

Idea,公認吃內存的IDE。我本機的Idea每次啓動都很慢,然後我就把機器內存從8G提高到了16G,但是Idea的啓動速度沒有明顯的增加。相反,相應速度更慢了。這是怎麼回事呢?這個時候,就想着用visual監控一下Idea的啓動

原创 淺談線程池的工作原理

jdk1.5引入了concurrent包,包中增加了線程池的概念。 關於線程池的工作原理,作者在execute做了註釋。 註釋意思爲: 1 .當新任務來時,execute執行,如果池中的線程數低於核心線程,此時就會創建新的線程來

原创 ThreadLocal的使用

ThreadLocal是jdk1.2時引入的一個線程局部變量。我們知道,多線程產生的原因就是因爲多個線程間存在共享變量。如果我們每個線程都有屬於自己的變量。就不會存在變量共享的問題了。ThreadLocal對象的作用就是用來實現每

原创 線程池的狀態

jdk1.5,sun公司邀請Doug Lea爲jdk1.5設計了concurrent包,對java以及整個it行業都產生了深遠影響。在此貼一張Doug老爺子的照片,以表敬仰 步入正題,最近正在看ThreadPoolExecuto

原创 線程池的幾種創建方式

最近線程池用的比較多,感覺挺有意思。在此記錄一下,線程池的創建有4種方式; 1 .Executors.newCachedThreadPool(); 這種線程池,是一個帶緩衝的線程池,官方的註釋中註明,該線程池適用於短時間的異步任務

原创 多線程Retry: 解釋

今天在看多線程源碼時,發現了一個Retry:,之前沒有使用過這個符號。不知道幹嘛的,就查了一下,然後自己試了一下,知道是幹嘛的了。 這個符號不是java的關鍵字,是多線程大師Doug Lea大神自定義的一個符號,可以換成任意的符

原创 navicat創建oracle表空間、新建用戶、授權

最近一直在用oracle數據庫,連接工具是navicat,下面說一下navicat創建表空間的過程 1 .創建表空間文件 2 .輸入表空間名稱 3 .新建用戶 以上操作的基礎都是你已經獲得了數據庫管理員的賬號,也就是System用戶的

原创 in 和 exists的使用

相比較而言,in關鍵字使用的要更多一點,因爲語句更容易理解。 如下: 查詢張三老師所教的課程名稱 使用in關鍵字查詢 select c_name from course c where c.t_id in (select t_id