日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > java常見基礎知識匯總(二)

java常見基礎知識匯總(二)

來源:程序員人生   發布時間:2017-01-12 11:59:41 閱讀次數:3407次

甚么致使線程阻塞

線程的阻塞

為了解決對同享存儲區的訪問沖突,Java 引入了同步機制,現在讓我們來考察多個線程對同享資源的訪問,明顯同步機制已不夠了,由于在任意時刻所要求的資源不1定已準備好了被訪問,反過來,同1時刻準備好了的資源也可能不止1個。為了解決這類情況下的訪問控制問題,Java 引入了對阻塞機制的支持.

阻塞指的是暫停1個線程的履行以等待某個條件產生(如某資源就緒),學過操作系統的同學對它1定已很熟習了。Java 提供了大量方法來支持阻塞,下面讓我們逐1分析。

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

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

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

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

wait() 和 notify() 方法的上述特性決定了它們常常和synchronized 方法或塊1起使用,將它們和操作系統的進程間通訊機制作1個比較就會發現它們的類似性:synchronized方法或塊提供了類似于操作系統原語的功能,它們的履行不會遭到多線程機制的干擾,而這1對方法則相當于 block 和wakeup 原語(這1對方法均聲明為 synchronized)。它們的結合使得我們可以實現操作系統上1系列精巧的進程間通訊的算法(如信號量算法),并用于解決各種復雜的線程間通訊問題。

談到阻塞,就不能不談1談死鎖,略1分析就可以發現,suspend() 方法和不指定超時期限的 wait() 方法的調用都可能產生死鎖。遺憾的是,Java 其實不在語言級別上支持死鎖的避免,我們在編程中必須謹慎地避免死鎖。

抽象類與接口區分

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

容器類之間的區分

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

內部類

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

hashmap和hashtable的區分

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

ArrayMap對照HashMap

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

下面是最近在開發Android相干項目時的1些心得體會,懶得開新貼就1起匯總在這里吧,畢竟都是用Java開發的。

如何導入外部數據庫

把原數據庫包括在項目源碼的 res/raw。
android系統下數據庫應當寄存在 /data/data/com..(package name)/ 目錄下,所以我們需要做的是把已有的數據庫傳入那個目錄下.操作方法是用FileInputStream讀取原數據庫,再用FileOutputStream把讀取到的東西寫入到那個目錄.

本地廣播和全局廣播

因廣播數據在本利用范圍內傳播,不用擔心隱私數據泄漏的問題。 不用擔心別的利用捏造廣播,造成安全隱患。 相比在系統內發送全局廣播,它更高效。

intentService作用是甚么,AIDL解決了甚么問題

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

Activity/Window/View3者的差別,fragment的特點

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品亚洲一区二区三区在线观看 | 亚洲 精品 综合 精品 自拍 | 在线免费精品视频 | 欧美 日韩 国产在线 | 日韩三级在线播放 | 天天草夜夜操 | 亚洲精品乱码久久久久久金桔影视 | 亚洲三级免费 | xxxx性欧美| 久久精品视频免费观看 | 久久成人免费 | 免费一区| 亚洲一区 欧美一区 | 国产日韩精品久久 | 成人国产一区 | 久久男女视频 | 国产精品99久久久久久动医院 | 久久久久国产精品一区 | 夜夜福利| 欧美性猛交xxxx黑人交 | 九九热精品在线 | 欧美国产精品一区二区三区 | 国产精品第157页 | 久热导航 | 免费国产在线视频 | 91精品免费 | 久久久久久久久久久久91 | 91av电影网 | 欧美精品久 | 久久久噜噜噜久久中文字幕色伊伊 | 久久一区二区视频 | chinesexxxx国产麻豆 | 亚洲国产区 | 99国产精品99久久久久久 | 午夜欧美一区二区三区在线播放 | 久久国产一区二区 | 久久久久国产精品一区三寸 | 成人免费av电影 | 成人妇女淫片aaaa视频 | 久久久久久久久久国产 | 色一情一乱一伦一区二区三区 |