多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php框架 > 框架設(shè)計(jì) > java常見(jiàn)基礎(chǔ)知識(shí)匯總(二)

java常見(jiàn)基礎(chǔ)知識(shí)匯總(二)

來(lái)源:程序員人生   發(fā)布時(shí)間:2017-01-12 11:59:41 閱讀次數(shù):3401次

甚么致使線程阻塞

線程的阻塞

為了解決對(duì)同享存儲(chǔ)區(qū)的訪問(wèn)沖突,Java 引入了同步機(jī)制,現(xiàn)在讓我們來(lái)考察多個(gè)線程對(duì)同享資源的訪問(wèn),明顯同步機(jī)制已不夠了,由于在任意時(shí)刻所要求的資源不1定已準(zhǔn)備好了被訪問(wèn),反過(guò)來(lái),同1時(shí)刻準(zhǔn)備好了的資源也可能不止1個(gè)。為了解決這類(lèi)情況下的訪問(wèn)控制問(wèn)題,Java 引入了對(duì)阻塞機(jī)制的支持.

阻塞指的是暫停1個(gè)線程的履行以等待某個(gè)條件產(chǎn)生(如某資源就緒),學(xué)過(guò)操作系統(tǒng)的同學(xué)對(duì)它1定已很熟習(xí)了。Java 提供了大量方法來(lái)支持阻塞,下面讓我們逐1分析。

  • sleep() 方法:sleep() 允許 指定以毫秒為單位的1段時(shí)間作為參數(shù),它使得線程在指定的時(shí)間內(nèi)進(jìn)入阻塞狀態(tài),不能得到CPU 時(shí)間,指定的時(shí)間1過(guò),線程重新進(jìn)入可履行狀態(tài)。 典型地,sleep() 被用在等待某個(gè)資源就緒的情形:測(cè)試發(fā)現(xiàn)條件不滿足后,讓線程阻塞1段時(shí)間后重新測(cè)試,直到條件滿足為止。
  • suspend() 和 resume() 方法:兩個(gè)方法配套使用,suspend()使得線程進(jìn)入阻塞狀態(tài),并且不會(huì)自動(dòng)恢復(fù),必須其對(duì)應(yīng)的resume() 被調(diào)用,才能使得線程重新進(jìn)入可履行狀態(tài)。典型地,suspend() 和 resume() 被用在等待另外一個(gè)線程產(chǎn)生的結(jié)果的情形:測(cè)試發(fā)現(xiàn)結(jié)果還沒(méi)有產(chǎn)生后,讓線程阻塞,另外一個(gè)線程產(chǎn)生了結(jié)果后,調(diào)用 resume() 使其恢復(fù)。
  • yield() 方法:yield() 使得線程放棄當(dāng)前分得的 CPU 時(shí)間,但是不使線程阻塞,即線程仍處于可履行狀態(tài),隨時(shí)可能再次分得 CPU 時(shí)間。調(diào)用 yield() 的效果等價(jià)于調(diào)度程序認(rèn)為該線程已履行了足夠的時(shí)間從而轉(zhuǎn)到另外一個(gè)線程.
  • wait() 和 notify() 方法:兩個(gè)方法配套使用,wait() 使得線程進(jìn)入阻塞狀態(tài),它有兩種情勢(shì),1種允許 指定以毫秒為單位的1段時(shí)間作為參數(shù),另外一種沒(méi)有參數(shù),前者當(dāng)對(duì)應(yīng)的 notify() 被調(diào)用或超越指定時(shí)間時(shí)線程重新進(jìn)入可履行狀態(tài),后者則必須對(duì)應(yīng)的 notify() 被調(diào)用.

初看起來(lái)它們與 suspend() 和 resume() 方法對(duì)沒(méi)有甚么分別,但是事實(shí)上它們是截然不同的。區(qū)分的核心在于,前面敘述的所有方法,阻塞時(shí)都不會(huì)釋放占用的鎖(如果占用了的話),而這1對(duì)方法則相反。上述的核心區(qū)分致使了1系列的細(xì)節(jié)上的區(qū)分。

首先,前面敘述的所有方法都隸屬于 Thread 類(lèi),但是這1對(duì)卻直接隸屬于 Object 類(lèi),也就是說(shuō),所有對(duì)象都具有這1對(duì)方法。初看起來(lái)這10分不可思議,但是實(shí)際上卻是很自然的,由于這1對(duì)方法阻塞時(shí)要釋放占用的鎖,而鎖是任何對(duì)象都具有的,調(diào)用任意對(duì)象的 wait() 方法致使線程阻塞,并且該對(duì)象上的鎖被釋放。而調(diào)用 任意對(duì)象的notify()方法則致使因調(diào)用該對(duì)象的 wait() 方法而阻塞的線程中隨機(jī)選擇的1個(gè)消除阻塞(但要等到取得鎖后才真正可履行)。

其次,前面敘述的所有方法都可在任何位置調(diào)用,但是這1對(duì)方法卻必須在 synchronized 方法或塊中調(diào)用,理由也很簡(jiǎn)單,只有在synchronized 方法或塊中當(dāng)前線程才占有鎖,才有鎖可以釋放。一樣的道理,調(diào)用這1對(duì)方法的對(duì)象上的鎖必須為當(dāng)前線程所具有,這樣才有鎖可以釋放。因此,這1對(duì)方法調(diào)用必須放置在這樣的 synchronized 方法或塊中,該方法或塊的上鎖對(duì)象就是調(diào)用這1對(duì)方法的對(duì)象。若不滿足這1條件,則程序雖然仍能編譯,但在運(yùn)行時(shí)會(huì)出現(xiàn)IllegalMonitorStateException 異常。

wait() 和 notify() 方法的上述特性決定了它們常常和synchronized 方法或塊1起使用,將它們和操作系統(tǒng)的進(jìn)程間通訊機(jī)制作1個(gè)比較就會(huì)發(fā)現(xiàn)它們的類(lèi)似性:synchronized方法或塊提供了類(lèi)似于操作系統(tǒng)原語(yǔ)的功能,它們的履行不會(huì)遭到多線程機(jī)制的干擾,而這1對(duì)方法則相當(dāng)于 block 和wakeup 原語(yǔ)(這1對(duì)方法均聲明為 synchronized)。它們的結(jié)合使得我們可以實(shí)現(xiàn)操作系統(tǒng)上1系列精巧的進(jìn)程間通訊的算法(如信號(hào)量算法),并用于解決各種復(fù)雜的線程間通訊問(wèn)題。

談到阻塞,就不能不談1談死鎖,略1分析就可以發(fā)現(xiàn),suspend() 方法和不指定超時(shí)期限的 wait() 方法的調(diào)用都可能產(chǎn)生死鎖。遺憾的是,Java 其實(shí)不在語(yǔ)言級(jí)別上支持死鎖的避免,我們?cè)诰幊讨斜仨氈?jǐn)慎地避免死鎖。

抽象類(lèi)與接口區(qū)分

  • 默許的方法實(shí)現(xiàn) 抽象類(lèi)可以有默許的方法實(shí)現(xiàn)完全是抽象的。接口根本不存在方法的實(shí)現(xiàn)
  • 實(shí)現(xiàn) 子類(lèi)使用extends關(guān)鍵字來(lái)繼承抽象類(lèi)。如果子類(lèi)不是抽象類(lèi)的話,它需要提供抽象類(lèi)中所有聲明的方法的實(shí)現(xiàn)。子類(lèi)使用關(guān)鍵字implements來(lái)實(shí)現(xiàn)接口。它需要提供接口中所有聲明的方法的實(shí)現(xiàn)。
  • 構(gòu)造器 抽象類(lèi)可以有構(gòu)造器 接口不能有構(gòu)造器
  • 與正常Java類(lèi)的區(qū)分 除你不能實(shí)例化抽象類(lèi)以外,它和普通Java類(lèi)沒(méi)有任何區(qū) 接口是完全不同的類(lèi)型
  • 訪問(wèn)修飾符 抽象方法可以有public、protected和default這些修飾符 接口方法默許修飾符是public。你可使用其它修飾符。
    -main方法
    抽象方法可以有main方法并且我們可以運(yùn)行它
    接口沒(méi)有main方法,因此我們不能運(yùn)行它。
    - 多繼承
    抽象類(lèi)在java語(yǔ)言中所表示的是1種繼承關(guān)系,1個(gè)子類(lèi)只能存在1個(gè)父類(lèi),但是可以存在多個(gè)接口。
    - 速度
    它比接口速度要快
    接口是略微有點(diǎn)慢的,由于它需要時(shí)間去尋覓在類(lèi)中實(shí)現(xiàn)的方法。
  • 添加新方法
    如果你往抽象類(lèi)中添加新的方法,你可以給它提供默許的實(shí)現(xiàn)。因此你不需要改變你現(xiàn)在的代碼。
    如果你往接口中添加方法,那末你必須改變實(shí)現(xiàn)該接口的類(lèi)。

容器類(lèi)之間的區(qū)分

http://www.cnblogs.com/yuanermen/archive/2009/08/05/1539917.html
http://alexyyek.github.io/2015/04/06/Collection/http://tianmaying.com/tutorial/java_collection

內(nèi)部類(lèi)

http://www.cnblogs.com/chenssy/p/3388487.html

hashmap和hashtable的區(qū)分

http://www.233.com/ncre2/JAVA/jichu/20100717/084230917.html

ArrayMap對(duì)照HashMap

http://lvable.com/?p=217

下面是最近在開(kāi)發(fā)Android相干項(xiàng)目時(shí)的1些心得體會(huì),懶得開(kāi)新貼就1起匯總在這里吧,畢竟都是用Java開(kāi)發(fā)的。

如何導(dǎo)入外部數(shù)據(jù)庫(kù)

把原數(shù)據(jù)庫(kù)包括在項(xiàng)目源碼的 res/raw。
android系統(tǒng)下數(shù)據(jù)庫(kù)應(yīng)當(dāng)寄存在 /data/data/com..(package name)/ 目錄下,所以我們需要做的是把已有的數(shù)據(jù)庫(kù)傳入那個(gè)目錄下.操作方法是用FileInputStream讀取原數(shù)據(jù)庫(kù),再用FileOutputStream把讀取到的東西寫(xiě)入到那個(gè)目錄.

本地廣播和全局廣播

因廣播數(shù)據(jù)在本利用范圍內(nèi)傳播,不用擔(dān)心隱私數(shù)據(jù)泄漏的問(wèn)題。 不用擔(dān)心別的利用捏造廣播,造成安全隱患。 相比在系統(tǒng)內(nèi)發(fā)送全局廣播,它更高效。

intentService作用是甚么,AIDL解決了甚么問(wèn)題

生成1個(gè)默許的且與主線程相互獨(dú)立的工作者線程來(lái)履行所有傳送至onStartCommand() 方法的Intetnt。
生成1個(gè)工作隊(duì)列來(lái)傳送Intent對(duì)象給你的onHandleIntent()方法,同1時(shí)刻只傳送1個(gè)Intent對(duì)象,這樣1來(lái),你就沒(méi)必要擔(dān)心多線程的問(wèn)題。在所有的要求(Intent)都被履行完以后會(huì)自動(dòng)停止服務(wù),所以,你不需要自己去調(diào)用stopSelf()方法來(lái)停止。
該服務(wù)提供了1個(gè)onBind()方法的默許實(shí)現(xiàn),它返回null
提供了1個(gè)onStartCommand()方法的默許實(shí)現(xiàn),它將Intent先傳送至工作隊(duì)列,然后從工作隊(duì)列中每次取出1個(gè)傳送至onHandleIntent()方法,在該方法中對(duì)Intent對(duì)相應(yīng)的處理。
AIDL (Android Interface Definition Language) 是1種IDL 語(yǔ)言,用于生成可以在Android裝備上兩個(gè)進(jìn)程之間進(jìn)行進(jìn)程間通訊(interprocess communication, IPC)的代碼。如果在1個(gè)進(jìn)程中(例如Activity)要調(diào)用另外一個(gè)進(jìn)程中(例如Service)對(duì)象的操作,就能夠使用AIDL生成可序列化的參數(shù)。 AIDL IPC機(jī)制是面向接口的,像COM或Corba1樣,但是更加輕量級(jí)。它是使用代理類(lèi)在客戶端和實(shí)現(xiàn)端傳遞數(shù)據(jù)。

Activity/Window/View3者的差別,fragment的特點(diǎn)

Activity像1個(gè)工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖) LayoutInflater像剪刀,Xml配置像窗花圖紙。
在Activity中調(diào)用attach,創(chuàng)建了1個(gè)Window。創(chuàng)建的window是其子類(lèi)PhoneWindow,在attach中創(chuàng)建PhoneWindow。在Activity中調(diào)用setContentView(R.layout.xxx)。其中實(shí)際上是調(diào)用的getWindow().setContentView()。調(diào)用PhoneWindow中的setContentView方法。創(chuàng)建ParentView:?作為ViewGroup的子類(lèi),實(shí)際是創(chuàng)建的DecorView(作為FramLayout的子類(lèi))。將指定的R.layout.xxx進(jìn)行填充?通過(guò)布局填充器進(jìn)行填充【其中的parent指的就是DecorView】。調(diào)用到ViewGroup。調(diào)用ViewGroup的removeAllView(),先將所有的view移除掉。添加新的view:addView()。
fragment 特點(diǎn)
Fragment可以作為Activity界面的1部份組成出現(xiàn);可以在1個(gè)Activity中同時(shí)出現(xiàn)多個(gè)Fragment,并且1個(gè)Fragment也能夠在多個(gè)Activity中使用;在Activity運(yùn)行進(jìn)程中,可以添加、移除或替換Fragment;Fragment可以響應(yīng)自己的輸入事件,并且有自己的生命周期,它們的生命周期會(huì)受宿主Activity的生命周期影響。

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品欧美韩国日本久久 | 波多结衣一区二区三区 | 亚洲久久影院 | 午夜激情啪啪 | 欧美精品18videose×性欧美 | 99欧美在线 | 亚洲网站在线 | 日韩欧美在线综合 | 免费看羞羞 | 欧洲精品一区二区三区 | 性欧美高清久久久久久久 | 国产成人a毛片在线 | 2017琪琪理论影院 | 亚洲乱码一二三四区国产 | 欧美艳星xxx | 久久九色 | 亚洲色大成网站www久久九九 | 视频一区二区中文字幕 | 亚洲经典激情春色另类 | 伊人婷婷色| 秋霞福利 | 久久精品综合 | 国产日韩精品欧美一区色 | 亚洲精品乱码久久久久久蜜桃 | 一区二区三区四区国产精品 | 午夜啪啪免费视频 | 韩国理论片在线观看bd | 精品videosex性欧美 | 日本中文字幕在线观看视频 | 久久一区二区三区免费播放 | 性做久久久久久网站 | 亚洲激情视频在线播放 | 国产中文字幕免费观看 | 国产精品久久久久9999赢消 | 精品国产一区二区三区久久 | 国产日韩欧美精品一区二区三区 | 日本中文字幕免费 | 亚洲人成在线影院 | 国产精品欧美日韩精品 | 久久精品国产一区 | 精品福利网|