Time of Update: 2018-07-27
接上篇文章 獨佔式同步狀態擷取與釋放 通過調用同步器的acquire(int arg)方法可以擷取同步狀態,該方法對中斷不敏感,也就是由於線程擷取同步狀態失敗後進入同步隊列中,後續對線程進行中斷操作時,線程不會從同步隊列中移出,程式碼範例: public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
Time of Update: 2018-07-27
調停者模式的意圖是定義個對象,封裝一組對象的互動,從而降低對象間的耦合度,避免了對象間顯示的引用,並且可以獨立的改變對象的行為。 過度耦合系統引入調停者 如果電腦沒有主板 下面來看看調停者模式的UML類圖: 代碼執行個體 抽象同事類 public abstract class Colleague { private Mediator mediator; public Colleague(Mediator mediator) {
Time of Update: 2018-07-27
Lock介面 鎖是用來控制多個線程訪問共用資源的方式,一般來說,一個鎖能夠防止多個線程同時訪問共用資源(但是有些鎖可以允許多個線程並發的訪問共用資源,比如讀寫鎖)。在Lock介面出現之前,Java程式是靠synchronized關鍵字實現鎖功能的,而Java SE
Time of Update: 2018-07-27
一.DataOutputStream類提供了如下3種寫入字串的方法: 1.writeByte(String s); 2.writeChars(String s); 3.writeUTF(String s); 二.三種方法的穩定性 其中,前兩種方法主要用於操作基礎資料型別
Time of Update: 2018-07-27
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.RandomAccessFile;
Time of Update: 2018-07-27
ReentrantLock屬於獨佔鎖定,這些鎖在同一時刻只允許一個線程進行訪問,而讀寫鎖在同一時刻可以允許多個線程訪問,但是在寫線程訪問時,所有的讀和其他寫線程都被阻塞。讀寫鎖維護了一對鎖,一個讀鎖和一個寫鎖,通過分離讀鎖和寫鎖,使得並發性相比一般的獨佔鎖定有了很大提升。 下面我們來看看讀寫鎖ReentrantReadWriter特性 公平性選擇:支援非公平(預設)和公平的鎖擷取模式,輸送量還是非公平優於公平 重入性:該鎖支援重入鎖,以讀寫線程為例:讀線程在擷取讀鎖之後,能夠再次讀取讀鎖,
Time of Update: 2018-07-27
學習Java挺長時間長了,對於java中的基本知識雖然平時知道怎麼用,但是別人突然間問你誰與誰是什麼關係時,還是有點生疏。既然說到這了,今天把Java中的執行個體變數、局部變數、類變數與final變數之間的關係的思路重新整理一遍。俗話說的好“好記憶不如爛筆頭”,在此分享一下。 首先先說一下局部變數:這是我們接觸java或者其他程式設計語言最早接觸的東西,他定義在方法中,使用之前必須進行初始化,且生命週期盡在該方法中有效。
Time of Update: 2018-07-27
/* 面試題:final修飾局部變數的問題 基本類型:基本類型的值不能發生改變。 參考型別:參考型別的地址值不能發生改變,但是,該對象的堆記憶體的值是可以改變的。 */ class Student { int age = 10; } class FinalTest { public static void main(String[] args) { //局部變數是基礎資料型別 (Elementary
Time of Update: 2018-07-27
面板模式意圖為子系統提供一個介面,方便使用 外觀類、工具類和樣本類 外觀類可能全是靜態方法 樣本類展示如何使用類和子系統 樣本類和外觀類的區別: 1、樣本類通常是單獨啟動並執行應用程式,而外觀類不是 2、樣本類包含了範例資料,外觀類沒有 3、外觀類通常是可配的,樣本類不是 4、外觀類的意圖是為了重用,樣本類不是 5、外觀類用在產品代碼中,樣本類不是 Java中外觀類比較少,原因是 1、Java開發人員通常要求對庫中的工具做整體的瞭解,面板模式可能會限制這種運用系統方式。
Time of Update: 2018-07-27
編寫一個截取字串的函數,輸入為一個字串和位元組數,輸出為按位元組截取的字串,但要保證漢字不被截取半個,如“我ABC”,4,應該截取“我AB”,輸入“我ABC漢DEF”,6,應該輸出“我ABC”,而不是“我ABC+漢的半個”。 public static void main(String[] args) throws Exception{//String str = "啊啊啊啊啊啊啊啊啊啊afasfd';String str = "我ABC漢";int num =
Time of Update: 2018-07-27
單例模式的意圖是為了確保一個類在整個JVM中有且僅有一個執行個體,並為他提供一個全域的訪問點。 單例模式機制 怎麼樣才能阻止其他開發人員建立類的新執行個體。 可以建立唯一一個建構函式,並設定為私人。 單例和線程 多線程延遲初始化一個單例模式盡量避免多個線程同時初始化該單例對象。 假設一個線程發現該單例對象為null,接著第二個線程運行也發現該單例對象為null,然後兩個線程都會對該單例對象進行初始化,為了避免這種競爭,需要使用鎖機制去協調不同線程對同一個方法的執行。
Time of Update: 2018-07-27
代理模式是對象的結構模式。代理模式給某一個對象提供一個代理對象,並由代理對象控制對原對象的引用。 類圖如下: 靜態代碼源碼 public abstract class Subjects { public abstract void operate();} public class RealSubjects extends Subjects { public void operate() { System.out.println("do
Time of Update: 2018-07-27
Java異常:選擇Checked Exception還是Unchecked Exception? Java包含兩種異常: checked異常 和 unchecked異常 。 checked和unchecked異常之間的區別是: Checked異常必須被顯式地 捕獲 或者 傳遞(向上拋出,沿著調用棧
Time of Update: 2018-07-27
Java實現多線程方式有兩種:繼承Thread類或者實現Runnable即可.線程啟動時調用start()方法. 實現Runnable介面可以實現資源共用 下面讓我們來看一下代碼: public class Thread1 extends Thread{ private int num = 5; @Override public void run() { for(int i=0;i<10;i++) {
Time of Update: 2018-07-27
孫悟空有七十二般變化,他的每一種變化都給他帶來一種附加本領。而不管孫悟空怎麼變化在二郎神眼裡,他永遠是那隻猢猻。 裝飾器模式以對客戶透明的方式動態給一個對象附加上更多的責任。 在孫悟空的例子裡,老孫變成的魚兒相當於老孫的子類。 裝飾模式的類圖如下: 裝飾模式的角色介紹: 抽象構件角色(ComponentDec):給出一個抽象介面,以規範準備接收附加責任的對象 具體構件(Concrete ComponentDec):定義一個將要接收附加責任的類
Time of Update: 2018-07-27
橋接模式的意圖是將抽象和抽象方法的實現相互分離來實現解耦,以便二者相互獨立的變化。 若要通過共同的介面控制多種機器,可以使用適配器模式,為每個控制器建立一個適配器類,每個適配器類都可以講標準的介面調用轉換為對現有控制器的調用。 常規抽象:橋接模式的一種方法 資料庫驅動 如果用Jdbc串連,只需要用不同的Class.forName參數即可,剩下的都一樣。是用oracle還是mysql,只是一個參與的不同而已,然後下面都是一樣的。
Time of Update: 2018-07-27
上一篇文章深入學習了Servlet的工作原理,這一篇我們來實現servlet構建web應用。 下面進入本文: 1.使用web.xml來配置servlet,這是最常用也是最簡單的方式。 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" &
Time of Update: 2018-07-27
在我們的開發中“池”的概念並不罕見,有資料庫連接池、線程池、對象池、常量池等等。下面我們主要針對線程池來一步一步揭開線程池的面紗。 使用線程池的好處 1、降低資源消耗 可以重複利用已建立的線程降低線程建立和銷毀造成的消耗。 2、提高響應速度 當任務到達時,任務可以不需要等到線程建立就能立即執行。 3、提高線程的可管理性 線程是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用線程池可以進行統一分配、調優和監控 線程池的工作原理
Time of Update: 2018-07-27
步驟 1、建立自訂註解類,並添加校正規則 2、解析自訂註解類並實現校正方法 3、建立測試類別並聲明自訂註解 4、編寫Junit測試類別測試結果 自訂註解類 package com.swk.common.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import
Time of Update: 2018-07-27
老是記不住peek poll 啊啥的一大堆的操作,記錄一下區別 deque介面 addFirst addLast offerFirst offerLast removeFirst removeLast pollFirst pollLast getFirst getLast peekFirst peekLast (push pop棧的操作很好區分) queue介面 add offer remove poll element peek