原创 java生產者和消費者問題

有很長一段時間想堅持寫博客,但總是感覺自己的技術水平有限,所以遲遲沒動手。今天我在寫一個簡單的生產者和消費者問題,在多線程的世界裏繞了很久很久,但在回顧操作系統的知識時,其中的進程協同和互斥問題給我帶來了很大的啓發,尤其是其中的信

原创 sychronizer同步器

Synchronizer同步器 在java併發編程中,多線程編程中無可避免的是線程流的控制問題以及共享數據的同步問題。java.util.concurrent包下的許多工具類都是爲更好、更簡單的方式爲程序提供線程流控制和共享數據同

原创 多線程經典問題之讀者、寫者問題

多線程通信之讀者、寫者問題 讀、寫問題是另一個非常出名的同步問題,常常用來模擬數據庫的數據查詢和數據修改兩種情況問題。也即, 一個數據庫允許有多個訪問者同時對其進行數據訪問,但是對於數據的修改只能有一個。那麼如何來控制這種訪問多

原创 java類初始化順序的影響

問題描述:在網上看到一個筆試題,由下列代碼輸出打印結果爲null,爲什麼? 詳細查看http://blog.csdn.net/two_water/article/details/53891952這篇博客 package test

原创 Executor任務執行框架

前言 官方文檔中Executor是一個將任務Runnable的提交與執行進行分離的對象。Executor接口中唯一入口是execute方法,類似於Runnable的run方法。在實際的應用系統中,Runnable作爲Thread的

原创 Java中枚舉的梗

Java中的枚舉定義和使用,相信大多數的java程序員都會,但是對於enum的使用其實很多人還是一知半解,包括本人。自己無意當中看到下面這段程序後,發現自己徹底懵了,問了一些朋友,知道的也不多,突然覺得自己對枚舉的認知量太少。通過

原创 Java泛型方法重寫問題

java中的泛型是採用類型擦除的方式來實現,也即編譯後所有原始類型的泛型類都共享同一份目標代碼,例如這裏的A<T>編譯器編譯爲A,那麼編譯器對於引用類中泛型的方法,也即泛型方法進行類型擦除操作時是如何實現的呢?答案是採用最左邊類型

原创 java異常及其處理機制

Java異常處理機制中finally的問題 1、什麼叫做異常 所謂異常是指程序的錯誤,即指系統錯誤,也包括邏輯錯誤,在語義層面上異常是程序的“意外、例外”。程序 = 數據 + 算法 + 代碼,那麼異常則是代碼進行算法實現時出現數

原创 數據結構 隊列

import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java

原创 哲學家就餐問題

Title 哲學家就餐問題是在1965年由Dijkstra提出並解決的一個問題,後來成爲同步問題的一個經典問題。 Disciber 有五位哲學家圍坐在一張桌子前, 他們面前都放了一碗麪,彼此間放了一把叉子。因爲面非常的滑,以至於使

原创 數據結構 串匹配 好難懂

package string; public class StringTest { /** * 字符串模式匹配 */ public static void main(String[] arg

原创 歸併排序

package innersort; public class MergeSort { /** * @param args */ public static void main(String

原创 堆排序

/** * 可以用一維數組表示堆heap,但是並不是一維數組就是堆。要成爲堆必須具備一個性質: 數組中的元素滿足,k[i]<=k[2*i] && * k[i]<=k[2*i+1] * 如果當前堆的的根

原创 數組反轉

一個數組int[] numArr = {0,1,2,3,4,5,6,7,8,9},將其進行倒敘排列爲{9,8,7,6,5,4,3,2,1,0},也就是將數組進行反轉。這裏分列兩種方式:由外入裏、由裏到外。算法的關鍵在於確定交換的元素邊界,

原创 線程死鎖

線程死鎖 安全性和活躍度通常是相互制約的,雖然可以通過開闢一定量的線程來提高活躍度,但是用來保證多線程安全的鎖也可能引起鎖順序死鎖問題(lock-ordering deadlock)。類似,我們使用線程池和信號量來約束資源的使用,但是也可