精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高手支招 Java經(jīng)驗分享(四)

開發(fā) 后端
本篇文章是作者Ant_Yan在CSDN論壇上發(fā)布的自己對Java學(xué)習(xí)的一些經(jīng)驗分享。這是他經(jīng)驗分享的第四部分。

  不知不覺已經(jīng)寫到第四篇了,第三篇講的是反射機(jī)制集合框架之類的,這次打算講講自己對反序列化和多線程的理解。希望能對大家學(xué)習(xí)Java起到幫助:

  1.關(guān)于序列化和反序列化

  應(yīng)該大家都大概知道Java中序列化和反序列化的意思,序列化就是把一個Java對象轉(zhuǎn)換成二進(jìn)制進(jìn)行磁盤上傳輸或者網(wǎng)絡(luò)流的傳輸,反序列化的意思就是把這個接受到的二進(jìn)制流重新組裝成原來的對象逆過程。它們在Java中分別是通過ObjectInputStream和 ObjectInputStream這兩個類來實現(xiàn)的(以下分別用ois和oos來簡稱)。

  oos的writeObject()方法用來執(zhí)行序列化的過程,ois的readObject()用來執(zhí)行反序列化的過程,在傳輸二進(jìn)制流之前,需要講這兩個高層流對象連接到同一個Channel上,這個Channel可以是磁盤文件,也可以是socket底層流。所以無論用哪種方式,底層流對象都是以構(gòu)造函數(shù)參數(shù)的形式傳遞進(jìn)oos和ois這兩個高層流,連接完畢了才可以進(jìn)行二進(jìn)制數(shù)據(jù)傳輸?shù)摹@樱?/p>

  可以是文件流通道:

  1. file = new File(“C:/data.dat”);  
  2. oos = new ObjectOutputStream(new FileOutputStream(file));  
  3. ois = new ObjectInputStream(new FileInputStream(file));    

  或者網(wǎng)絡(luò)流通道:

  1. oos = new ObjectOutputStream(socket.getOutputStream());  
  2. ois = new ObjectInputStream(socket.getInputStream()); 

  不知道大家是否注意到oos總是在ois之前定義,這里不希望大家誤解這個順序是固定的么?回答是否定的,那么有順序要求么?回答是肯定的。原則是什么呢?

  原則是互相對接的輸入/輸出流之間必須是output流先初始化然后再input流初始化,否則就會拋異常。大家肯定會問為什么?只要稍微看一看這兩個類的源代碼文件就大概知道了,output流的任務(wù)很簡單,只要把對象轉(zhuǎn)換成二進(jìn)制往通道中寫就可以了,但input流需要做很多準(zhǔn)備工作來接受并最終重組這個Object,所以O(shè)bjectInputStream的構(gòu)造函數(shù)中就需要用到output初始化發(fā)送過來的header信息,這個方法叫做 readStreamHeader(),它將會去讀兩個Short值用于決定用多大的緩存來存放通道發(fā)送過來的二進(jìn)制流,這個緩存的size因jre的版本不同是不一樣的。所以output如果不先初始化,input的構(gòu)造函數(shù)首先就無法正確運行。

  對于上面兩個例子,第一個順序是嚴(yán)格的,第二個因為oos和ois連接的已經(jīng)不是對方了,而是socket另外一端的流,需要嚴(yán)格按照另外一方對接的output流先于對接的input流打開才能順利運行。

  這個writeObject和readObject本身就是線程安全的,傳輸過程中是不允許被并發(fā)訪問的。所以對象能一個一個接連不斷的傳過來,有很多人在運行的時候會碰到EOFException, 然后百思不得其解,去各種論壇問解決方案。其實筆者這里想說,這個異常不是必須聲明的,也就是說它雖然是異常,但其實是正常運行結(jié)束的標(biāo)志。EOF表示讀到了文件尾,發(fā)送結(jié)束自然連接也就斷開了。如果這影響到了你程序的正確性的話,請各位靜下心來看看自己程序的業(yè)務(wù)邏輯,而不要把注意力狹隘的聚集在發(fā)送和接受的方法上。因為筆者也被這樣的bug困擾了1整天,被很多論壇的帖子誤解了很多次最后得出的教訓(xùn)。如果在while循環(huán)中去readObject,本質(zhì)上是沒有問題的,有對象數(shù)據(jù)來就會讀,沒有就自動阻塞。那么拋出EOFException一定是因為連接斷了還在繼續(xù)read,什么原因?qū)е逻B接斷了呢?一定是業(yè)務(wù)邏輯哪里存在錯誤,比如NullPoint、ClassCaseException、ArrayOutofBound,即使程序較大也沒關(guān)系,最多只要單步調(diào)適一次就能很快發(fā)現(xiàn)bug并且解決它。

  難怪一位程序大師說過:解決問題90%靠經(jīng)驗,5%靠技術(shù),剩下5%靠運氣!真是金玉良言,筆者大概查閱過不下30篇討論在while循環(huán)中使用 readObject拋出EOFExceptionde 的帖子,大家都盲目的去關(guān)注解釋這個名詞、反序列化的行為或反對這樣寫而沒有一個人認(rèn)為EOF是正確的行為,它其實很老實的在做它的事情。為什么大家都忽略了真正出錯誤的地方呢?兩個字,經(jīng)驗!

  2.關(guān)于Java的多線程編程

  關(guān)于Java的線程,初學(xué)或者接觸不深的大概也能知道一些基本概念,同時又會很迷惑線程到底是怎么回事?如果有人認(rèn)為自己已經(jīng)懂了不妨來回答下面的問題:

  a. A對象實現(xiàn)Runnable接口,A.start()運行后所謂的線程對象是誰?是A么?

  b. 線程的wait()、notify()方法到底是做什么時候用的,什么時候用?

  c. 為什么線程的suspend方法會被標(biāo)注過時,不推薦再使用,線程還能掛起么?

  d. 為了同步我們會對線程方法聲明Synchronized來加鎖在對象上,那么如果父類的f()方法加了Synchronized,子類重寫f()方法必須也加Synchronized么?如果子類的f()方法重寫時聲明Synchronized并調(diào)用super.f(),那么子類對象上到底有幾把鎖呢?會因為競爭產(chǎn)生死鎖么?

  呵呵,各位能回答上來幾道呢?如果這些都能答上來,說明對線程的概念還是滿清晰的,雖說還遠(yuǎn)遠(yuǎn)不能算精通。筆者這里一一做回答,礙于篇幅的原因,筆者盡量說得簡介一點,如果大家有疑惑的歡迎一起討論。

  首先第一點,線程跟對象完全是兩回事,雖然我們也常說線程對象。但當(dāng)你用run()和start()來啟動一個線程之后,線程其實跟這個繼承了 Thread或?qū)崿F(xiàn)了Runnable的對象已經(jīng)沒有關(guān)系了,對象只能算內(nèi)存中可用資源而對象的方法只能算內(nèi)存正文區(qū)可以執(zhí)行的代碼段而已。既然是資源和代碼段,另外一個線程當(dāng)然也可以去訪問,main函數(shù)執(zhí)行就至少會啟動兩個線程,一個我們稱之為主線程,還一個是垃圾收集器的線程,主線程結(jié)束就意味著程序結(jié)束,可垃圾收集器線程很可能正在工作。

  第二點,wait()和sleep()類似,都是讓線程處于阻塞狀態(tài)暫停一段時間,不同之處在于wait會釋放當(dāng)前線程占有的所有的鎖,而 sleep不會。我們知道獲得鎖的唯一方法是進(jìn)入了Synchronized保護(hù)代碼段,所以大家會發(fā)現(xiàn)只有Synchronized方法中才會出現(xiàn) wait,直接寫會給警告沒有獲得當(dāng)前對象的鎖。所以notify跟wait配合使用,notify會重新把鎖還給阻塞的線程重而使其繼續(xù)執(zhí)行,當(dāng)有多個對象wait了,notify不能確定喚醒哪一個,必經(jīng)鎖只有一把,所以一般用notifyAll()來讓它們自己根據(jù)優(yōu)先級等競爭那唯一的一把鎖,競爭到的線程執(zhí)行,其他線程只要繼續(xù)wait。

  從前Java允許在一個線程之外把線程掛起,即調(diào)用suspend方法,這樣的操作是極不安全的。根據(jù)面向?qū)ο蟮乃枷朊總€對象必須對自己的行為負(fù)責(zé),而對自己的權(quán)力進(jìn)行封裝。如果任何外步對象都能使線程被掛起而阻塞的話,程序往往會出現(xiàn)混亂導(dǎo)致崩潰,所以這樣的方法自然是被斃掉了啦。

  最后一個問題比較有意思,首先回答的是子類重寫f()方法可以加Synchronized也可以不加,如果加了而且還內(nèi)部調(diào)用了super.f ()的話理論上是應(yīng)該對同一對象加兩把鎖的,因為每次調(diào)用Synchronized方法都要加一把,調(diào)用子類的f首先就加了一把,進(jìn)入方法內(nèi)部調(diào)用父類的 f又要加一把,加兩把不是互斥的么?那么調(diào)父類f加鎖不就必須永遠(yuǎn)等待已經(jīng)加的鎖釋放而造成死鎖么?實際上是不會的,這個機(jī)制叫重進(jìn)入,當(dāng)父類的f方法試圖在本對象上再加一把鎖的時候,因為當(dāng)前線程擁有這個對象的鎖,也可以理解為開啟它的鑰匙,所以同一個線程在同一對象上還沒釋放之前加第二次鎖是不會出問題的,這個鎖其實根本就沒有加,它有了鑰匙,不管加幾把還是可以進(jìn)入鎖保護(hù)的代碼段,暢通無阻,所以叫重進(jìn)入,我們可以簡單認(rèn)為第二把鎖沒有加上去。

  總而言之,Synchronized的本質(zhì)是不讓其他線程在同一對象上再加一把鎖。

【編輯推薦】

  1. 新手入門:學(xué)習(xí)Java的一點經(jīng)驗心得
  2. 61條Java面向?qū)ο笤O(shè)計的經(jīng)驗原則
  3. 經(jīng)驗分享:我的JavaEE學(xué)習(xí)道路
  4. Java對象類型轉(zhuǎn)換的四個經(jīng)驗
責(zé)任編輯:韓亞珊 來源: CSDN
相關(guān)推薦

2011-03-31 16:44:43

Java

2011-03-31 15:36:02

Java

2011-03-31 13:56:24

Java

2011-03-31 16:49:40

Java

2011-03-31 13:32:13

Java

2011-03-31 14:49:35

2011-03-31 13:52:22

Java

2011-03-31 16:26:28

Java

2011-04-07 13:18:00

管理軟件項目項目

2018-06-19 08:12:55

2009-10-29 16:57:05

Oracle傳輸表空間

2010-07-21 14:05:31

2014-05-28 10:55:11

Windows XP安全補(bǔ)丁

2011-06-22 15:04:28

JAVA

2010-08-18 14:19:01

無線路由器

2009-09-28 10:52:00

CCNA考試經(jīng)驗CCNA

2011-07-15 17:35:19

JavaScript

2009-12-07 11:11:46

PHP顯示圖片

2011-05-16 17:36:05

SEO

2009-10-15 10:59:00

CCNA經(jīng)驗分享CCNA
點贊
收藏

51CTO技術(shù)棧公眾號

黑人巨大精品一区二区在线| 欧美日韩一道本| a毛片在线免费观看| 黄色欧美成人| 亚洲人成电影在线观看天堂色| 激情五月婷婷久久| 影音先锋男人在线资源| 91免费观看视频| 国产日产欧美精品| 国产一级久久久| 欧美一区电影| 亚洲成色www8888| 天美星空大象mv在线观看视频| 50度灰在线| 国产日韩欧美精品电影三级在线| 97视频资源在线观看| 中文字幕免费高清网站| 国色天香一区二区| 日韩亚洲第一页| av网站免费在线播放| 亚洲成人五区| 欧美精品乱码久久久久久按摩| 午夜免费福利小电影| 成人午夜在线影视| 欧美极品另类videosde| 精品欧美一区二区久久久伦| a网站在线观看| 日韩成人av影视| 欧美一区深夜视频| 久久精品国产亚洲av麻豆色欲 | 亚洲欧美日韩精品一区二区| 久久成人精品视频| 日本在线观看网址| 啪啪亚洲精品| 亚洲欧美激情四射在线日| 香蕉久久久久久av成人| 韩国一区二区三区视频| 欧美日韩一区二区在线视频| 六月丁香激情网| 俺来也官网欧美久久精品| 亚洲欧美日韩综合aⅴ视频| 日韩在线导航| 高清毛片在线看| 国产亚洲欧美一级| 欧美精品亚洲精品| 色鬼7777久久| 26uuu久久综合| 久久99久久精品国产| 黄色av网址在线| 成人永久免费视频| 国产三级精品在线不卡| 亚洲精品国偷拍自产在线观看蜜桃| 国内精品伊人久久久久av一坑| 国产精品视频免费观看www| 天堂网一区二区| 日日夜夜一区二区| 国产精品男人的天堂| 日韩乱码一区二区三区| 日本特黄久久久高潮| 国产国语videosex另类| jizz国产在线| 蜜桃视频一区二区| 国产欧美日韩91| 一级黄色免费看| 久久超级碰视频| 成人午夜黄色影院| av中文字幕第一页| 成人av在线影院| 免费中文日韩| aaa在线免费观看| 1000部国产精品成人观看| 国产系列第一页| 欧美大片黄色| 色综合天天综合网天天看片| 爆乳熟妇一区二区三区霸乳| 欧美啪啪网站| 日韩欧美在线网站| 免费看毛片的网站| 精品在线观看入口| 俺去啦;欧美日韩| 国产性一乱一性一伧一色| 亚洲成人资源| 国产91色在线|免| 亚洲一卡二卡在线观看| 国产在线观看免费一区| 国产视色精品亚洲一区二区| 黄色在线网站| 亚洲免费在线播放| 无码播放一区二区三区| 欧美色片在线观看| 欧美成人精品高清在线播放| 给我免费观看片在线电影的| 欧美一站二站| 久久免费精品视频| 自拍偷拍第八页| 成人午夜碰碰视频| 先锋影音欧美| av在线理伦电影| 精品视频999| 深田咏美中文字幕| 不卡av一区二区| 久久久久久久91| 国产精品国产精品国产| 国产69精品久久久久毛片| 亚洲bbw性色大片| 黄色免费网站在线| 色综合久久久久网| 国产精品嫩草69影院| 经典一区二区| 久久久久久久久久久av| 在线不卡免费视频| 99久久精品免费看国产| 国产91av视频在线观看| 综合另类专区| 精品国产乱码久久| 日韩精品久久久久久久的张开腿让| 亚洲精品看片| 99国产在线视频| 日本中文字幕在线视频| 色综合网色综合| 国产精品久久AV无码| 欧美黄色一级视频| 国产精品视频免费在线| 久久久久国产精品嫩草影院| 亚洲国产三级在线| 香蕉视频色在线观看| 欧美电影《睫毛膏》| 国产成人精品久久亚洲高清不卡| 国模私拍视频在线| 亚洲精品国产无套在线观| 别急慢慢来1978如如2| 欧美美女黄色| 久久久免费在线观看| 国产日韩在线观看一区| 中文字幕一区二区在线观看| 日本男人操女人| 欧美有码在线| 91国产美女在线观看| 成人免费观看在线视频| 一区二区三区在线观看视频| 国产999免费视频| 91精品国产调教在线观看| 国产精品视频一区国模私拍| 国产三级在线观看| 色婷婷精品久久二区二区蜜臂av| 青青草视频成人| 亚洲精品资源| 国内精品一区二区| 交100部在线观看| 日韩成人小视频| 美日韩一二三区| 99久久99久久久精品齐齐| 成人免费视频91| 超碰精品在线观看| 久久久久久久97| 污污视频在线观看网站| 天天影视涩香欲综合网| 波多野结衣有码| 国产偷自视频区视频一区二区| 精品视频一区在线| 亚洲精品mv| 亚洲人成亚洲人成在线观看| 91青青草视频| 国产精品家庭影院| 天天av天天操| 亚洲五月婷婷| 欧美aaaaa喷水| 日韩在线短视频| 久久精品免费播放| 精品人妻无码一区二区色欲产成人 | 午夜欧美精品| 国产精品免费观看高清| 中文字幕乱码中文乱码51精品 | 麻豆网站视频在线观看| 91精品午夜视频| 黄网站免费在线| 久久色中文字幕| 天天干天天草天天| 女人香蕉久久**毛片精品| 国产伦精品一区二区三区在线| 国产精品xx| 伊人伊成久久人综合网小说| 国产精品久久久久久久一区二区 | 麻豆传媒网站在线观看| 高潮按摩久久久久久av免费| 日本在线观看天堂男亚洲| 秋霞午夜理伦电影在线观看| 精品国产三级电影在线观看| 91久久国产综合久久91| 亚洲欧洲在线观看av| 精品少妇人妻av一区二区三区| 天堂在线一区二区| 中文字幕超清在线免费观看| 全球av集中精品导航福利| 国产精品一区二区三区免费视频| 韩国日本一区| 中文字幕在线亚洲| 欧美 日韩 国产 在线| 欧美在线制服丝袜| 国产乡下妇女做爰毛片| 国产精品久久久一本精品| 91精品又粗又猛又爽| 美女免费视频一区二区| 国产 日韩 欧美在线| 欧美hentaied在线观看| 狠狠色狠狠色综合人人| 亚洲欧洲二区| 国产精品扒开腿做爽爽爽男男| 中文字幕在线观看网站| 一区二区三区四区在线观看视频 | 9999精品视频| 国产99久久久欧美黑人| 变态调教一区二区三区| 久久精品国产精品亚洲| 黄色毛片在线观看| 亚洲国产三级网| 国产ts人妖调教重口男| 欧美性生交片4| 在线免费黄色av| 亚洲国产一区二区三区| 波多野结衣在线网址| 国产色一区二区| 欧美熟妇一区二区| 国产99久久久国产精品潘金| 久久6免费视频| 日本欧美一区二区三区| 国产成人黄色片| 999在线观看精品免费不卡网站| 亚洲av首页在线| 欧美丰满日韩| 亚洲欧洲免费无码| 国产亚洲一区二区三区啪| 久久久久久久久一区二区| swag国产精品一区二区| 国产精品99久久久久久久| av日韩在线免费观看| 国产一区二区在线免费视频| 中文另类视频| 国产美女被下药99| 日韩精品麻豆| 国产精品吹潮在线观看| 成人小电影网站| 日本亚洲精品在线观看| 久久久一本精品| 国产精品国产三级国产aⅴ浪潮| 在线看片福利| 国产91亚洲精品| 欧美日韩亚洲国产| 国产精品久久久久不卡| 日韩中文视频| 国产一区视频在线播放| 欧美亚洲黄色| 亚洲xxxx做受欧美| 免费观看亚洲天堂| 国产精品毛片一区视频| 日韩大尺度在线观看| 你懂的视频在线一区二区| 国产aⅴ精品一区二区三区久久| 欧美一区二区高清在线观看| 欧美日韩激情| 手机在线视频你懂的| 欧美国产高潮xxxx1819| 夜夜添无码一区二区三区| 香蕉成人久久| jizz大全欧美jizzcom| 久久99精品久久久久久动态图| 性欧美在线视频| 国产成人精品在线看| 成人性生活免费看| 久久久久久久电影| 污污视频网站在线免费观看| 亚洲蜜臀av乱码久久精品| 国产一级免费观看| 色欧美片视频在线观看| 中文字幕你懂的| 日韩一级二级三级精品视频| 天天干天天草天天射| 亚洲网站在线观看| 黄色网页网址在线免费| 98精品国产自产在线观看| 日韩欧美看国产| 91久久国产婷婷一区二区| 国产无遮挡裸体免费久久| 日本不卡久久| 午夜天堂精品久久久久| av网站在线观看不卡| 国精产品一区一区三区mba桃花| 天堂www中文在线资源| 国产日韩欧美电影| 久久久久久福利| 欧美午夜精品久久久久久超碰| 午夜精品小视频| 亚洲石原莉奈一区二区在线观看| 国产视频中文字幕在线观看| 欧美一区在线直播| 91麻豆精品| 欧美日本亚洲| 欧美成人综合| 日本在线观看免费视频| 成人黄色av网站在线| 色欲AV无码精品一区二区久久| 一区二区成人在线视频| 老熟妇一区二区三区啪啪| 亚洲激情中文字幕| 麻豆网站在线观看| 国产成人亚洲综合91| 亚洲视频一起| 亚洲一区二区三区在线观看视频| 亚洲人www| 国产裸体视频网站| 中文字幕av一区二区三区| 91美女免费看| 亚洲成人网久久久| 中文在线手机av| 成人国产在线视频| 国精一区二区| 精品99在线视频| 成人高清视频在线观看| 欧美日韩中文字幕在线观看| 欧美三区在线视频| 国产在线视频资源| 91国内产香蕉| 女同另类激情重口| 天天做天天躁天天躁| 国产在线精品视频| 九九热久久免费视频| 日本高清不卡一区| 日本在线视频1区| 97高清免费视频| 国产伦乱精品| 国产亚洲黄色片| 国产成人一级电影| 欧美风情第一页| 欧美日韩在线免费视频| 国产三级在线看| 国产成人黄色av| 在线成人动漫av| 超碰网在线观看| 久久综合国产精品| 亚洲欧美精品一区二区三区| 日韩av在线网| 蜜桃视频在线网站| 精品视频一区二区三区四区| 一本色道久久综合亚洲精品高清| 午夜福利三级理论电影| 一个色综合网站| 国 产 黄 色 大 片| 久久久久久久久91| 美女午夜精品| 日韩av黄色网址| 国产日韩欧美一区二区三区综合| 国产精品久久久久久久久夜色| 一本一道久久a久久精品逆3p| 吞精囗交69激情欧美| 日韩精品一线二线三线| 免费视频一区二区| 国产免费一区二区三区四区| 4438成人网| 污污网站在线观看| 国产综合色一区二区三区| 99视频在线精品国自产拍免费观看| 亚洲成av人片在线观看无| 欧美性猛交xxxx乱大交蜜桃| 国产午夜精品一区理论片| 国产精品自产拍在线观| 亚洲精品va| 天天躁日日躁狠狠躁av麻豆男男| 舔着乳尖日韩一区| 国产日韩精品在线看| 国产日韩中文字幕| 国产精品v欧美精品v日本精品动漫| www.黄色网| 日本丶国产丶欧美色综合| 日本中文字幕在线观看| 懂色一区二区三区av片| 午夜宅男久久久| 国产白丝一区二区三区| 日韩视频免费观看高清完整版 | 欧美在线观看视频一区二区| 韩国av网站在线| 精品国产综合区久久久久久| 日产欧产美韩系列久久99| 天天干中文字幕| 亚洲精品在线不卡| japansex久久高清精品| av无码久久久久久不卡网站| 久久久久高清精品| 99国产精品久久久久久久成人| 91av在线精品| 天天影视欧美综合在线观看| 亚洲の无码国产の无码步美| 欧美视频一区二区三区| 青草视频在线免费直播| 色一情一乱一伦一区二区三欧美| 国产高清成人在线| 亚洲精品国产无码| 久久久这里只有精品视频| 色喇叭免费久久综合网| 亚洲欧美在线不卡| 91精品国产综合久久精品性色 |