首頁  >  文章  >  Java  >  JAVA的簡單介紹

JAVA的簡單介紹

怪我咯
怪我咯原創
2017-06-23 13:52:061310瀏覽

簡史

  早期的電腦中不包含作業系統,從頭到尾都只執行一個程序,而這個程式能存取電腦所有資源。隨著電腦發展,作業系統的出現,使得電腦可以同時運行多個程序,並且每個程序都在單獨的進程內運行。為什麼要這麼做呢?主要基於以下原因:

1.資源使用率 程式在等待時電腦可以執行另一個程序,同一個資源可以被不同程序使用,這無疑提高了資源的利用率。
2.公平性 不同的使用者與程式對電腦有相同的使用權,透過時間分片每個程式共享資源,而不是等待上一個程式運行結束再啟動下一個程式。
3.便利性 每個程式單獨運行,必要時相互通信,比一個程式完成所有任務更容易實現。

  既然電腦由單一任務發展為多任務,那麼程式自然也可以從傳統的序列程式發展為並發程式

  串列程式的優點在於簡單直覺。但同樣地由於以上三個原因促使線程的出現。上述電腦可以在單獨的進程內運行程序,而線程允許在同一個進程內存在多個程序控制流,一個程序的多個線程還可以同時被多個CPU調度運行。這就等同於電腦同時執行多個程式(進程),程式同時執行多個執行緒。即進程內運行執行緒。

  執行緒又稱輕量級進程。現如今的作業系統都是以線程為基本單位調度的。由於線程間共享資源,如果沒有明確的同步機制,就會導致線程間執行紊亂,資料錯誤或失效,導致異常。這通常也是並發程式設計的難度。

  以我的觀點,所謂的並發程式設計就是對執行緒的運用。執行緒能將許多非同步工作流程轉換成串列工作流程,而並發程式設計便是在非同步情況下實現同步,使其符合需求。

  那麼執行緒有哪些優點和風險呢?

執行緒優勢

  執行緒能有效的降低程式開發與維護成本,提升效能。降低程式碼複雜度,更好模擬人類工作方法。

優勢1.發揮多處理器的強大功能 多處理器系統日益完善,使得執行緒的作用特別明顯。由於不同執行緒可以同時被多個處理器調度,特別是在I/O操作時,減少了程式的等待時間,多處理器讓程式執行的效率提升從而導致擴大了系統的吞吐率。
優勢2.降低建模難度 一直做同一件事總比做多件事來的簡單。利用線程吧程序任務細化,多任務分給多線程,每個線程任務單一,必要時相互通信,比單線程來回切換任務花銷更小。
優勢3.簡化非同步事件處理 當一個請求發出等待回應時,整個程式都要等待嗎?這就意味著其他請求都將停頓。就好比聊天時必須對方回覆才能說下一句話,這顯然是不合理的。如果給每個請求一個線程處理,線程獨立不相互影響,解決了問題。當然如果聊天回覆時必須知道對方說的話,注意線程安全。
優勢4.回應更敏捷的使用者介面傳統GUI程式是單執行緒的,如果其中一個使用者事件處理時間過長,整個程式將處於卡死狀態,使得使用者體驗變差。如果把一些耗時操作分給一個獨立線程,其他事件依舊有線程處理,變會使得使用者介面流暢。

線程風險

  線程的支援是把雙面刃,並發程式的開發也給程式設計師帶來了更高的水平要求。

風險1.安全性問題 並發程式設計可能會出現單執行緒程式不會出現的錯誤。
風險2.活躍性問題 活躍性的定義是「某件正確的事情一定會發生」。單線程中無限循環便是活躍性問題。如果線程A等待線程B釋放所持有的資源,線程B一直沒有釋放,則線程A將一直等待下去,這便是活躍性問題。
風險3.效能問題 效能則是「正確的事情盡快發生」。好的並發設計會提升效能,反之則會降低效能,畢竟啟動執行緒也是要消耗資源的。

  關於安全性有一個很好的例子:

value++;

  只此一行程式碼,在單執行緒程式下完全沒有問題,但在多執行緒下可能會出現意想不到的後果。

  執行此行程式碼分三步驟:1.讀取value值;2.value值加1;3.將加1的值賦回value。而程式中可能由多個執行緒交替執行,在此期間如果兩個執行緒同時讀出value,從而得到相同的值,又同時把它加1,結果就是不同執行緒獲得同樣的值。而我們的期望是這個數值被加了兩次。

  每一個java程式都會使用線程,即時你在程式中沒有顯示地建立線程,使用的框架仍在建立線程,這些線程必須是線程安全的。

以上是JAVA的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn