Time of Update: 2017-01-19
第一種(懶漢,線程不安全):public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; }}這種寫法lazy
Time of Update: 2017-01-19
class MyThreadScopeData { // 單例 private MyThreadScopeData() { } // 提供擷取執行個體方法 public static synchronized MyThreadScopeData
Time of Update: 2017-01-19
本文執行個體講述了java讀取properties設定檔的方法。分享給大家供大家參考。具體分析如下:這兩天做java項目,用到屬性檔案,到網上查資料,好半天也沒有找到一個滿意的方法能讓我讀取到.properties檔案中屬性值,很是鬱悶,網上講的擷取屬性值大概有以下方法,以下三種方法逐漸最佳化,以達到最好的效果以下都以date.properties檔案為例,該檔案放在src目錄下,檔案內容為:startdate=2011-02-07totalweek=25方法一:public class
Time of Update: 2017-01-19
本文執行個體講述了java中List對象排序通用方法。分享給大家供大家參考。具體分析如下:在資料庫中查出來的列表list中,往往需要對不同的欄位重新排序,一般的做法都是使用排序的欄位,重新到資料庫中查詢。如果不到資料庫查詢,直接在第一次查出來的list中排序,無疑會提高系統的效能。只要把第一次查出來的結果存放在session中,就可以對list重新排序了。一般對list排序可以使用Collections.sort(list),但如果list中包含是一個對象的話,這種方法還是行不通的。那要怎麼排序
Time of Update: 2017-01-19
本文執行個體講述了Java排序演算法總結之堆排序。分享給大家供大家參考。具體分析如下:1991年電腦先驅獎獲得者、斯坦福大學電腦科學系教授羅伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同發明了著名的堆排序演算法( Heap Sort )。本文主要介紹堆排序用Java來實現。堆積排序(Heapsort)是指利用堆積樹(堆)這種資料結構所設計的一種排序演算法,可以利用數組的特點快速定位指定索引的元素。堆排序是不穩定的排序方法,輔助空間為O(1),
Time of Update: 2017-01-19
類比ThreadLocal類實現:線程範圍內的共用變數,每個線程只能訪問他自己的,不能訪問別的線程。package com.ljq.test.thread;import java.util.HashMap;import java.util.Map;import java.util.Random;/** * 線程範圍內的共用變數 * * 三個模組共用資料,主線程模組和AB模組 * * @author Administrator * */public class
Time of Update: 2017-01-19
本文執行個體講述了Java排序演算法總結之歸併排序。分享給大家供大家參考。具體分析如下:歸併操作(merge),也叫歸併演算法,指的是將兩個已經排序的序列合并成一個序列的操作。和快速排序類似,讓我們一起來看,歸併在Java中的實現。歸併排序(Merge)是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合并為整體有序序列。歸併排序是建立在歸併操作上的一種有效排序演算法。該演算法是採用分治法(Divide and
Time of Update: 2017-01-19
本文執行個體講述了Java排序演算法總結之希爾排序。分享給大家供大家參考。具體分析如下:前言:希爾排序(Shell Sort)是插入排序的一種。是針對直接插入排序演算法的改進。該方法又稱縮小增量排序,因DL.Shell於1959年提出而得名。本文主要介紹希爾排序用Java是怎樣實現的。希爾排序(縮小增量法)
Time of Update: 2017-01-19
本文執行個體講述了Java排序演算法總結之冒泡排序。分享給大家供大家參考。具體分析如下:前言:冒泡排序(BubbleSort)就是依次比較相鄰的兩個數,將小數放在前面,大數放在後面。下面讓我們一起
Time of Update: 2017-01-19
多個線程訪問共用對象和資料的方式有兩種情況:1、每個線程執行的代碼相同,例如,賣票:多個視窗同時賣這100張票,這100張票需要多個線程共用。2、每個線程執行的代碼不同,例如:設計四個線程,其中兩個線程每次對j增加1,另外兩個線程每次對j減少1。a、如果每個線程執行的代碼相同,可以使用同一個Runnable對象,這個對象中有共用資料。賣票就可以這樣做,每個視窗都在做賣票任務,賣的票都是同一個資料(點擊查看具體案例)。b、如果每個線程執行的代碼不同,就需要使用不同的Runnable對象,有兩種方式
Time of Update: 2017-01-19
鎖是控制多個線程對共用資源進行訪問的工具。通常,鎖提供了對共用資源的獨佔訪問。一次只能有一個線程獲得鎖,對共用資源的所有訪問都需要首先獲得鎖。不過,某些鎖可能允許對共用資源並發訪問,如 ReadWriteLock(維護了一對相關的鎖,一個用於唯讀操作,另一個用於寫入操作) 的讀寫鎖。1、Lock提供了無條件的、可輪詢的、定時的、可中斷的鎖擷取操作,所有加鎖和解鎖的方法都是顯式的。public interface Lock{ void lock(); //加鎖
Time of Update: 2017-01-19
本文執行個體講述了Java排序演算法總結之選擇排序。分享給大家供大家參考。具體分析如下:選擇排序的基本操作就是每一趟從待排序的資料元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。演算法不穩定,O(1)的額外的空間,比較的時間複雜度為O(n^2),交換的時間複雜度為O(n),並不是自適應的。在大多數情況下都不推薦使用。只有在希望減少交換次數的情況下可以用。 基本思想 n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結
Time of Update: 2017-01-19
讀寫鎖:分為讀鎖和寫鎖,多個讀鎖不互斥,讀鎖與寫鎖互斥,這是由jvm自己控制的,你只要上好相應的鎖即可。如果你的代碼唯讀資料,可以很多人同時讀,但不能同時寫,那就上讀鎖;如果你的代碼修改資料,只能有一個人在寫,且不能同時讀取,那就上寫鎖。總之,讀的時候上讀鎖,寫的時候上寫鎖!三個線程讀資料,三個線程寫資料樣本:可以同時讀,讀的時候不能寫,不能同時寫,寫的時候不能讀。讀的時候上讀鎖,讀完解鎖;寫的時候上寫鎖,寫完解鎖。注意finally解鎖。package com.ljq.test.thread;
Time of Update: 2017-01-19
好像倒計時計數器,調用CountDownLatch對象的countDown方法就將計數器減1,當到達0時,所有等待者就開始執行。java.util.concurrent.CountDownLatch一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。用給定的計數初始化CountDownLatch。由於調用了countDown()方法,所以在當前計數到達零之前,await方法會一直受阻塞。之後,會釋放所有等待的線程,await的所有後續調用都將立即返回。這種現象只
Time of Update: 2017-01-19
用於實現兩個人之間的資料交換,每個人在完成一定的事務後想與對方交換資料,第一個先拿出資料的人將一直等待第二個人拿著資料到來時,才能彼此交換資料。複製代碼 代碼如下:package com.ljq.test.thread; import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; public
Time of Update: 2017-01-19
本文執行個體講述了Java插入排序方法。分享給大家供大家參考。具體分析如下:有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,但要求插入後此資料序列仍然有序,這個時候就要用到插入排序法。本文主要介紹的是插入排序的java實現。 插入排序的基本操作就是將一個資料插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料。比較和交換的時間複雜度為O(n^2),演算法自適應,對於資料已基本有序的情況,時間複雜度為O(n),演算法穩定,開銷很低。演算法適合於資料已基本
Time of Update: 2017-01-19
在java中,如果要對集合對象或數組對象進行排序,需要實現Comparator介面以達到我們想要的目標。接下來我們類比下在集合對象中對日期屬性進行排序一、實體類Steppackage com.ljq.entity;/** * 運號單流程 * * @author Administrator * */public class Step{ /** 處理時間 */ private String acceptTime = ""; /** 快件所在地點 */ private String
Time of Update: 2017-01-19
在實際編程中,往往存在著這樣的“資料集”,它們的數值在程式中是穩定的,而且“資料集”中的元素是有限的。例如星期一到星期日七個資料元素組成了一周的“資料集”,花牌 (春夏秋冬)四個資料元素組成了四季的“資料集”。在java中如何更好的使用這些“資料集”呢?因此枚舉便派上了用場,以下代碼詳細介紹了枚舉的用法。package com.ljq.test;/** * 枚舉用法詳解 * * @author jiqinlin * */public class TestEnum { /** *
Time of Update: 2017-01-19
在對客戶做支援人員時,我們常常會看到很多客戶根本沒意識到的異常。在消除了這些異常之後,代碼運行速度與以前相比大幅提升。這讓我們產生一種猜測,就是在代碼裡面使用異常會帶來顯著的效能開銷。因為異常是錯誤情況處理的重要組成部分,摒棄是不太可能的,所以我們需要衡量異常處理對於效能影響,我們可以通過一個實驗看看異常處理的對於效能的影響。實驗我的實驗基於一段隨機拋出異常的簡單代碼。從科學的角度,這並非完全準確的測量,同時我也並不瞭解HotSpot
Time of Update: 2017-01-19
1. 字串有整型的相互轉換String a = String.valueOf(2); //integer to numeric string int i = Integer.parseInt(a); //numeric string to an int2. 向檔案末尾新增內容BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter(”filename”, true));