Time of Update: 2017-01-19
1.題目:主線程執行10次,子線程執行10次,此過程重複50次代碼:package com.Thread.test;/* * function:主線程執行10次,子線程執行10次, * 此過程重複50次 */public class ThreadProblem { public ThreadProblem() { final Business bus = new Business(); new Thread(new Runnable() { public void run() {
Time of Update: 2017-01-19
Spring容器可以自動裝配相互協作bean之間的關係,這有助於減少對XML配置,而無需編寫一個大的基於Spring應用程式的較多的<constructor-arg>和<property>元素。自動裝配模式:有下列自動裝配模式,可用於指示Spring容器使用自動裝配依賴注入。使用<bean/>元素的autowire屬性為一個bean定義中指定自動裝配模式。byName模式這種模式規定由自動裝配屬性名稱。Spring容器在外觀上自動線屬性設定為byName的XM
Time of Update: 2017-01-19
volatile記憶體語義的實現下面,讓我們來看看JMM如何?volatile寫/讀的記憶體語義。前文我們提到過重排序分為編譯器重排序和處理器重排序。為了實現volatile記憶體語義,JMM會分別限制這兩種類型的重排序類型。下面是JMM針對編譯器制定的volatile重定序表:舉例來說,第三行最後一個儲存格的意思是:在程式順序中,當第一個操作為普通變數的讀或寫時,如果第二個操作為volatile寫,則編譯器不能重排序這兩個操作。從上表我們可以看出:當第二個操作是volatile寫時,不管第一個
Time of Update: 2017-01-19
1.volatile關鍵字的兩層語義 一旦一個共用變數(類的成員變數、類的靜態成員變數)被volatile修飾之後,那麼就具備了兩層語義: 1)保證了不同線程對這個變數進行操作時的可見度,即一個線程修改了某個變數的值,這新值對其他線程來說是立即可見的。 2)禁止進行指令重排序。 先看一段代碼,假如線程1先執行,線程2後執行://線程1boolean stop = false;while(!stop){ doSomething();} //線程2stop =
Time of Update: 2017-01-19
一.線程的狀態 在正式學習Thread類中的具體方法之前,我們先來瞭解一下線程有哪些狀態,這個將會有助於後面對Thread類中的方法的理解。 線程從建立到最終的消亡,要經曆若干個狀態。一般來說,線程包括以下這幾個狀態:建立(new)、就緒(runnable)、運行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 當需要新起一個線程來執行某個子任務時,就建立了一個線程。但是線程建立之後,不會立即進入就緒狀態,因為線程的運行需要一些條件(
Time of Update: 2017-01-19
ConcurrentHashMap並發容器 ConcurrentHashMap可以做到讀取資料不加鎖,並且其內部的結構可以讓其在進行寫操作的時候能夠將鎖的粒度保持地盡量地小,不用對整個ConcurrentHashMap加鎖。ConcurrentHashMap的內部結構 ConcurrentHashMap為了提高本身的並發能力,在內部採用了一個叫做Segment的結構,一個Segment其實就是一個類Hash
Time of Update: 2017-01-19
我們平時使用的一些常見隊列都是非阻塞隊列,比如PriorityQueue、LinkedList(LinkedList是雙向鏈表,它實現了Dequeue介面)。使用非阻塞隊列的時候有一個很大問題就是:它不會對當前線程產生阻塞,那麼在面對類似消費者-生產者的模型時,就必須額外地實現同步策略以及線程間喚醒策略,這個實現起來就非常麻煩。但是有了阻塞隊列就不一樣了,它會對當前線程產生阻塞,比如一個線程從一個空的阻塞隊列中取元素,此時線程會被阻塞直到阻塞隊列中有了元素。當隊列中有元素後,被阻塞的線程會自動被
Time of Update: 2017-01-19
提要:本文從實現原理的角度上闡述和剖析了:在Java語言中,以 String 作為類型的變數在作為方法參數時所表現出的“非對象”的特性。一、最開始的樣本寫代碼最重要的就是實踐,不經過反覆實驗而得出的說辭只能說是憑空遐想罷了。所以,在本文中首先以一個簡單樣本來拋出核心話題:public class StringAsParamOfMethodDemo { public static void main(String[] args) {
Time of Update: 2017-01-19
俗話說,工欲善其事,必先利其器。要做微信公眾號開發,兩樣東西不可少,那就是要有一個用來測試的公眾號,還有一個用來調式代碼的開發環境。測試公眾號微信公眾號有訂閱號、服務號、企業號,在註冊的時候看到這樣的資訊,只有訂閱號可以個人申請,服務號和企業號要有企業資質才可以。這裡所說的微信公眾號開發指的是訂閱號和服務號。另外,未認證的個人訂閱號有一些介面是沒有許可權的,並且目前個人訂閱號已不支援微信認證,也就是說個人訂閱號無法調用一些進階的許可權介面,下圖就是一個未認證的個人訂閱號所具備許可權列表,像產生二
Time of Update: 2017-01-19
主要運用java反射原理,格式化輸出java對象屬性值,特別是list 和map。 MyTestUtil.javapackage utils; import java.lang.reflect.Field;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Collection;import java.util.Date;import java.util.Iterator;import
Time of Update: 2017-01-19
Spring架構的關鍵組件是面向方面編程(AOP)架構。面向方面的編程不僅打破程式邏輯分成不同的部分稱為所謂的擔憂。跨越多個點的應用程式的功能被稱為橫切關注點和這些橫切關注點是從應用程式的商務邏輯概念上區分開來。還有像日誌記錄,審計,聲明性事務,安全性和快取等方面的各種常見的好例子模組化的OOP中的關鍵單元是類,而在AOP中模組化的單元則是切面。依賴注入可以協助你從對方解耦應用程式物件和AOP可以協助你從他們影響的對象分離橫切關注點。
Time of Update: 2017-01-19
每一個基於java的應用程式都有一個共同工作來展示給使用者看到的內容作為工作的應用幾個對象。當編寫一個複雜的Java應用程式,應用程式類應該儘可能獨立其他Java類來增加重複使用這些類,並獨立於其他類別的測試它們,而這樣做單元測試的可能性。依賴注入(或有時稱為布線)有助於粘合這些類在一起,同時保持他們的獨立。考慮有其中有一個文字編輯器組件的應用程式,要提供拼字檢查。標準的代碼將看起來像這樣: public class TextEditor { private
Time of Update: 2017-01-19
使用value屬性和使用<property>標籤的ref屬性在你的bean設定檔中的對象引用,這兩種情況下可以處理單值到一個bean,如果你想通過多元值,如Java Collection類型List, Set, Map 及 Properties。要處理這種情況,Spring提供了四種類型的如下集合的配置元素:可以使用<list> 或<set>
Time of Update: 2017-01-19
BeanPostProcessor
Time of Update: 2017-01-19
bean的定義繼承bean定義可以包含很多的配置資訊,包括建構函式的參數,屬性值,比如初始化方法,靜態Factory 方法名等容器的具體資訊。子bean定義從父定義繼承配置資料。子的定義可以覆蓋一些值,或者根據需要添加其他。Spring
Time of Update: 2017-01-19
觀察者模式是一種行為設計模式。觀察者模式的用途是,當你對一個對象的狀態感興趣,希望在它每次發生變化時獲得通知。在觀察者模式中,觀察另外一個對象狀態的對象叫做Observer觀察者,被觀察的對象叫著Subject被觀察者。觀察者模式 Observer 觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。 這個主題對象在狀態上發生變化時,會通知所有觀察者對象,讓它們能夠自動更新自己。觀察者模式的組成 抽象主題角色:把所有對觀察者對象的引用儲存在一個集合中,
Time of Update: 2017-01-19
本文較為詳細的分析了Java反射機制。分享給大家供大家參考,具體如下:一、預先需要掌握的知識(java虛擬機器) java虛擬機器的方法區:java虛擬機器有一個運行時資料區,這個資料區又被分為方法區,堆區和棧區,我們這裡需要瞭解的主要是方法區。方法區的主要作用是儲存被裝載的類 的類型資訊,當java虛擬機器裝載某個類型的時候,需要類裝載器定位相應的class檔案,然後將其讀入到java虛擬機器中,緊接著虛擬機器提取class
Time of Update: 2017-01-19
本文執行個體講述了java實現求兩個字串最長公用子串的方法。分享給大家供大家參考,具體如下:這個是華為OJ上的一道題目。首先,如果我們用java寫代碼,華為OJ有以下三條規則需遵守,否則編譯無法通過或者用例無法通過,規則如下:(1)一定不可以有包名;(2)主類名只能為Main;(3)不可以輸出與結果無關的資訊。好了,按照以上規則,我們寫出來的代碼如下(此代碼不是最優的,只是用來記錄華為OJ上java代碼的書寫規則):import java.util.Scanner;public class
Time of Update: 2017-01-19
同時與資料庫使用普通的舊JDBC的工作,它變得繁瑣寫不必要的代碼來處理異常,開啟和關閉資料庫連接等,但Spring的JDBC架構需要的所有低層次細節從開啟串連,準備和執行SQL語句,過程異常,處理事務,最後關閉串連。所以,你所要做的只是定義串連參數,並指定要執行的SQL語句,並做必要的工作,在每次迭代時從資料庫中擷取資料。Spring
Time of Update: 2017-01-19
一、概述 ThreadLocal是什麼呢?其實ThreadLocal並非是一個線程的本地實現版本,它並不是一個Thread,而是threadlocalvariable(線程局部變數)。也許把它命名為ThreadLocalVar更加合適。線程局部變數(ThreadLocal)其實的功用非常簡單,就是為每一個使用該變數的線程都提供一個變數值的副本,是Java中一種較為特殊的線程綁定機制,是每一個線程都可以獨立地改變自己的副本,而不會和其它線程的副本衝突。 從線程的角度看,每個線程