多線程方面我讀了哪些好書
別的不說先看看java各種崗位的,硬性要求。隨便打開一個(gè)招聘網(wǎng)站,例如:獵聘網(wǎng),搜索java,如下圖

就點(diǎn)開第一個(gè)崗位

發(fā)現(xiàn)“多線程”是任職要求之一。說實(shí)話,搜素的崗位十個(gè)有八個(gè)要求有多線程、高并發(fā)等經(jīng)驗(yàn),過去一年關(guān)注了不少的崗位。只要是中高級Java開發(fā)攻城獅的崗位要求都必然有多線程、高并發(fā)、高可用等項(xiàng)目經(jīng)驗(yàn)。為了系統(tǒng)深入了解Java多線程的相關(guān)知識點(diǎn),從我的經(jīng)驗(yàn)來看隨便看一些帖子,或者培訓(xùn)機(jī)構(gòu)錄制的視頻遠(yuǎn)不夠;還是需要自己找一兩本系統(tǒng)介紹多線程方面的書籍來看,然后練習(xí)。
過去一年看了兩三本這方面的書籍,我覺得汪文君老師寫的兩本非常不錯(cuò)推薦一下給大家。
第一本:《Java高并發(fā)編程詳解:多線程與架構(gòu)設(shè)計(jì)》
這本書并沒有講到J.C.U包里的任何知識,但是把synchronized、voliate、類加載的相關(guān)知識講得非常透徹,而且使用這些基本的關(guān)鍵字模擬實(shí)現(xiàn)了J.C.U包了一些鎖、線程池。另外,介紹了非常多的、經(jīng)典的多線程處理的模式?。
第二本:《Java高并發(fā)編程:深入理解并發(fā)核心庫》
這邊介紹了微基準(zhǔn)測試框架Java Microbenchmark Harness(JMH),然后深入介紹了J.C.U并發(fā)核心庫的。圍繞Java并發(fā)包展開,包括Java的原子類型及其底層原理;Java的并發(fā)工具集,還穿插了Google Guava的部分內(nèi)容;Java的并發(fā)容器,包括阻塞隊(duì)列BlockingQueue和并發(fā)容器等內(nèi)容;Java的ExecutorService,以及Future家族成員的詳解。
第三本:《Java多線程編程核心技術(shù) 第二版》
這邊也可以,不過如果有前面兩本,就沒必要在購買這本了。就不詳細(xì)介紹了,需要補(bǔ)充這方面知識的朋友們,對吧的購買就行。這三本書都囫圇吞棗的看了一遍,覺得寫得相當(dāng)不錯(cuò)。
為啥要推薦一些多線程方面的書呢?因?yàn)殡m然做的項(xiàng)目不乏幾百萬、上千萬級別的,但是真正需要編寫多線程的代碼的場景還是很少的。而招聘的崗位要求里有時(shí)刻不缺需要多線程、高并發(fā)的項(xiàng)目要求。項(xiàng)目經(jīng)驗(yàn)不能給的,只能通過多讀書,多看方案要彌補(bǔ)這方面的欠缺。項(xiàng)目中欠缺編寫多線程代碼的場景,但并不代表不存在多線程安全的問題,多線程安全的問題無時(shí)無刻都存在,一點(diǎn)都不能馬虎。經(jīng)??吹饺侄x使用 simpleDateFormat 的代碼。
SimpleDateFormat線程安全測試:
/**
?*?SimpleDateFormat線程安全測試
?*/
public?class?SimpleDateFormatTest?{
???private?SimpleDateFormat?simpleDateFormat?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");
???ThreadPoolExecutor?poolExecutor?=?new?ThreadPoolExecutor(10,?100,?1,?TimeUnit.MINUTES,?new?LinkedBlockingQueue<>(1000),?new?MyThreadFactory("SimpleDateFormatTest"));
????public?void?test()?{
????????while?(true)?{
????????????poolExecutor.execute(new?Runnable()?{
????????????????@Override
????????????????public?void?run()?{
????????????????????String?dateString?=?simpleDateFormat.format(new?Date());
????????????????????try?{
????????????????????????Date?parseDate?=?simpleDateFormat.parse(dateString);
????????????????????????String?dateString2?=?simpleDateFormat.format(parseDate);
????????????????????????System.out.println(dateString.equals(dateString2));
????????????????????}?catch?(ParseException?e)?{
????????????????????????e.printStackTrace();
????????????????????}
????????????????}
????????????});
????????}
????}
喜歡,在看
