精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

日本在线观看网址| www.xxx亚洲| 高潮一区二区三区乱码| 99热免费精品在线观看| 亚洲欧美一区二区激情| 午夜免费看毛片| 大黄网站在线观看| 久久久久国产精品麻豆| 91欧美精品午夜性色福利在线 | 国产日韩欧美一区二区东京热| 综合久久精品| 亚洲区一区二区| 中文字幕制服丝袜| 在线成人视屏| 午夜精品福利一区二区蜜股av| 欧美在线激情| 高潮毛片7777777毛片| 久久精品国内一区二区三区| 97精品久久久中文字幕免费| 黄色录像免费观看| 国产伦精品一区二区三区千人斩| 日韩欧美国产综合在线一区二区三区| 热久久精品国产| 日本成人不卡| 亚洲日本在线视频观看| 先锋影音欧美| 少妇精品高潮欲妇又嫩中文字幕| 日韩国产欧美在线播放| 97精品欧美一区二区三区| 污污的视频在线免费观看| 国产一区二区三区91| 亚洲国产高潮在线观看| 久久久久中文字幕亚洲精品 | 久久久久久亚洲中文字幕无码| 日本高清精品| 正在播放一区二区| 婷婷六月天在线| 9i看片成人免费高清| 亚洲一区二区视频| 国产女人18毛片| 日本在线天堂| 国产精品久久久久久久久晋中| 久久亚洲综合网| 日韩在线视频观看免费| 国产成人精品免费网站| 国产日韩欧美黄色| 伊人久久中文字幕| 天堂影院一区二区| 国产精品国产亚洲伊人久久| 欧美精品韩国精品| 香蕉av777xxx色综合一区| 97在线视频一区| 国产精品成人网站| 一区二区亚洲| 97香蕉久久超级碰碰高清版| 国产精品99精品| 黑丝一区二区| 国内精品久久久久影院 日本资源| 欧美人妻精品一区二区三区| 狠狠色丁香久久综合频道| 欧美激情视频三区| 一级aaa毛片| 一区二区高清| 国产成人精品日本亚洲专区61| www.欧美色| 麻豆精品新av中文字幕| 成人免费在线视频网址| 国产夫绿帽单男3p精品视频| 国产成人精品午夜视频免费| 国产伦精品一区二区三区高清| 天天操天天干天天爱| 91视频在线看| 一区二区视频在线免费| 亚洲小说区图片| 狠狠色香婷婷久久亚洲精品| 国产精品久久久久9999小说| 欧美综合影院| 精品国产一区a| 美女又爽又黄视频毛茸茸| 精品国产成人| y97精品国产97久久久久久| 久草视频手机在线| 黄色在线一区| 国产suv精品一区二区三区88区| 中文字幕 亚洲视频| 国产精一品亚洲二区在线视频| 97se国产在线视频| 视频一区二区在线播放| 国产精品久久一级| 日韩欧美不卡在线| 中文.日本.精品| 欧美不卡一区二区三区四区| 97超碰在线免费观看| 99久久婷婷国产综合精品电影√| 久久99国产精品自在自在app| 你懂的国产视频| 免费成人美女在线观看| 国产精品国色综合久久| 国产69精品久久app免费版| 亚洲女女做受ⅹxx高潮| av观看免费在线| 免费一区二区三区在线视频| 亚洲精品小视频| 久久久久久久久久久久久女过产乱| 国产日韩欧美三级| 亚洲bt欧美bt日本bt| 青春有你2免费观看完整版在线播放高清 | 午夜成年人在线免费视频| 欧美性猛交xxxx黑人猛交| 亚洲天堂网2018| 亚洲盗摄视频| 欧美国产日韩一区二区三区| 一区二区三区麻豆| 成人av电影在线| 一区二区三区日韩视频| 三级成人黄色影院| 欧美精品一区二区三区在线| 永久av免费网站| 丝袜亚洲另类欧美综合| 黄色一区三区| 免费在线国产视频| 91精品在线观看入口| 91视频免费在观看| 亚洲区欧美区| 岛国视频一区| 在线免费观看污| 欧美精品黑人性xxxx| 99久久人妻无码精品系列| 亚洲美洲欧洲综合国产一区| 亚洲一区二区免费在线| 婷婷免费在线视频| 在线亚洲精品福利网址导航| 国产精品无码网站| 伊人久久综合| 国外成人免费视频| 岛国片av在线| 亚洲成avwww人| 欧美精品一级片| 国产精品一区二区无线| 日韩不卡视频一区二区| 色综合视频一区二区三区44| 中文字幕最新精品| 69国产精品视频免费观看| 972aa.com艺术欧美| 日本www在线视频| 久久久亚洲欧洲日产| 久久男人av资源网站| 亚洲欧美另类综合| 五月婷婷色综合| 成年人网站免费在线观看| 最新日韩在线| 久久精品美女| 亚洲不卡系列| 久久精品成人欧美大片| 国产同性人妖ts口直男| 亚洲精品乱码久久久久久| 伊人影院在线观看视频| 国产精品s色| 国产精品区一区二区三含羞草| 丁香花电影在线观看完整版| 亚洲国语精品自产拍在线观看| 国产高潮久久久| 国产亚洲视频系列| 亚洲精品www.| 欧美激情1区2区3区| 国产精品手机视频| 性欧美18xxxhd| 国产亚洲福利一区| 国产精品欧美综合亚洲| 亚洲精品国产精品乱码不99| jjzz黄色片| 亚洲专区免费| 伊人久久青草| 99精品国产一区二区三区2021| 国内外成人免费激情在线视频| 欧美在线观看在线观看| 欧美日韩一区二区不卡| 欧美交换国产一区内射| 99精品久久久久久| 色婷婷成人在线| 国模 一区 二区 三区| 久久综合九九| 韩国一区二区三区视频| 97在线免费观看| 成人亚洲综合天堂| 日韩一区二区三区视频在线观看| 日本一区二区免费在线观看| 国产色爱av资源综合区| 日本成人在线免费观看| 老鸭窝毛片一区二区三区| 亚洲一一在线| 欧美国产不卡| 国产日韩在线一区| 美女露胸视频在线观看| 久久九九国产精品怡红院 | 亚洲视频在线免费看| 国产免费黄色大片| 欧美视频一区二区三区…| 欧美风情第一页| 久久亚洲综合色| 亚洲男人天堂2021| 手机精品视频在线观看| 男人天堂手机在线视频| 久久国产精品成人免费观看的软件| 成人av资源网| 伊人久久综合网另类网站| 欧美亚洲第一区| 中文国产字幕在线观看| 在线看福利67194| 天天干天天色天天| 欧美一区永久视频免费观看| 一级黄色av片| 亚洲精品日产精品乱码不卡| 俄罗斯毛片基地| 99久久综合狠狠综合久久| 中文 日韩 欧美| 日韩电影网1区2区| 久久久久久久久久久视频| 亚洲色图二区| 亚洲视频电影| 国产欧美一区二区精品久久久| 国产精品xxx在线观看www| 香蕉久久久久久| 国产精品久久久久久久久久久不卡| gogo高清午夜人体在线| 粗暴蹂躏中文一区二区三区| аⅴ资源新版在线天堂| 国产视频精品va久久久久久| 可以免费观看的毛片| 日韩午夜精品视频| 国产日韩免费视频| 7777精品伊人久久久大香线蕉经典版下载| 久久久蜜桃一区二区| 懂色aⅴ精品一区二区三区蜜月 | 日本黄色片在线播放| 国产成人精品免费一区二区| 波多野结衣电影免费观看| 国产在线观看一区二区| 国产精品嫩草影院8vv8| 捆绑调教美女网站视频一区| 色多多视频在线播放| 久久久久国产精品午夜一区| 97超碰青青草| 午夜在线视频一区二区区别| 久久成人免费观看| 国产精品视频| 国产精品亚洲αv天堂无码| 性色av一区二区怡红| 精品99在线视频| 久久精选视频| 亚洲色精品三区二区一区| 日韩电影在线观看一区| www.精品在线| 国产乱对白刺激视频不卡| 成人免费播放视频| 国产成人av电影在线观看| 怡红院一区二区| 972aa.com艺术欧美| 国产一二三四五区| 国产精品麻豆久久久| 色老板免费视频| 亚洲综合一二区| 久久精品人妻一区二区三区| 欧美日韩国产综合新一区| 五月天激情四射| 欧美日韩在线播放一区| 99国产精品久久久久久久成人| 日韩欧美激情一区| 亚洲人妻一区二区| 国产一区二区三区视频| 黄色av电影在线观看| 久久91精品国产| 亚洲最大网站| 国产欧美日韩中文字幕在线| 视频免费一区二区| 欧美日韩一区二 | 久久国产精品网| 欧美一级网站| 91精品视频国产| 99视频一区二区| 国产123在线| 一区二区三区资源| 国产婷婷色一区二区在线观看| 欧美性受xxxx| 黄色成人一级片| 中文字幕视频在线免费欧美日韩综合在线看 | 国产一区二区丝袜高跟鞋图片| 精品国产伦一区二区三区观看说明| 国产一区精品在线| 欧美一区2区| 亚洲色成人www永久在线观看 | 国产日本在线| 欧美成人免费观看| 免费观看亚洲| 91免费版网站在线观看| 蜜桃国内精品久久久久软件9| 在线成人性视频| 性久久久久久| 折磨小男生性器羞耻的故事| 国产三级精品视频| 动漫精品一区一码二码三码四码| 欧美无砖砖区免费| 少妇人妻精品一区二区三区| 北条麻妃久久精品| 三级成人在线| 国产亚洲欧美一区二区三区| 日韩久久精品| 日本成年人网址| 成熟亚洲日本毛茸茸凸凹| 免费一级suv好看的国产网站 | www.亚洲天堂网| 成人综合在线视频| 日韩av手机在线免费观看| 欧美性猛交xxxx乱大交退制版| 色综合久久久久久| 欧美福利小视频| 玖玖玖视频精品| 在线观看免费91| 青青草一区二区三区| 三叶草欧洲码在线| 亚洲一区国产视频| 国产亲伦免费视频播放| 在线一区二区日韩| 欧美成人资源| 久久青青草综合| 18成人免费观看视频| 男人女人拔萝卜视频| 亚洲人成精品久久久久| 在线观看av大片| 一本一道久久a久久精品逆3p| 激情黄产视频在线免费观看| 成人女人免费毛片| 欧美三级午夜理伦三级中文幕| 黄色小视频免费网站| 国产精品欧美经典| 中文字幕一区2区3区| 亚洲最新av在线网站| 视频精品导航| 亚洲国产成人不卡| 青青国产91久久久久久| 免费黄在线观看| 欧美在线不卡一区| 成人免费视频| 国产一区二区视频在线观看| 久久久久久久久久久久久久| 捷克做爰xxxⅹ性视频| 亚洲免费在线视频| www.国产三级| 久久久久亚洲精品| 老司机成人在线| 国产二区视频在线播放| www成人在线观看| 蜜臀99久久精品久久久久小说 | 成人在线观看亚洲| 91视频国产精品| 激情欧美一区| 真人bbbbbbbbb毛片| 色综合久久中文综合久久97| 久久电影视频| 国产在线日韩在线| 欧美黄在线观看| 一本色道综合久久欧美日韩精品| 精品久久久一区| av资源网站在线观看| 91久热免费在线视频| 欧美天天视频| 51调教丨国产调教视频| 欧美视频在线一区二区三区| 成年视频在线观看| 国产视频99| 秋霞av亚洲一区二区三| 成人免费视频国产免费观看| 欧美mv日韩mv| 波多视频一区| 国产精品jizz在线观看老狼| 国产盗摄女厕一区二区三区| 日韩免费一级片| 日韩在线免费视频观看| 亚洲综合网狠久久| 成年人免费大片| 亚洲精品va在线观看| 亚洲 小说区 图片区 都市| 国产美女扒开尿口久久久| 国内揄拍国内精品久久| 最近中文字幕免费视频| 欧美一区二区三区免费在线看| segui88久久综合9999| 日韩视频精品| 丁香婷婷综合网| 糖心vlog精品一区二区| 色综合久久悠悠| 国产精品三级| 95视频在线观看| 欧美日韩中文精品| а√天堂中文资源在线bt| 尤物国产精品| 久久久久久久久久久99999| www.亚洲欧美| 国产女同一区二区| 亚洲欧美日本日韩|