搜尋
首頁Javajava教程JAVA的簡單介紹

JAVA的簡單介紹

Jun 23, 2017 pm 01:52 PM
筆記簡介讀書

簡史

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

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
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

如何將Java的RMI(遠程方法調用)用於分佈式計算?如何將Java的RMI(遠程方法調用)用於分佈式計算?Mar 11, 2025 pm 05:53 PM

本文解釋了用於構建分佈式應用程序的Java的遠程方法調用(RMI)。 它詳細介紹了接口定義,實現,註冊表設置和客戶端調用,以解決網絡問題和安全性等挑戰。

如何使用Java的插座API進行網絡通信?如何使用Java的插座API進行網絡通信?Mar 11, 2025 pm 05:53 PM

本文詳細介紹了用於網絡通信的Java的套接字API,涵蓋了客戶服務器設置,數據處理和關鍵考慮因素,例如資源管理,錯誤處理和安全性。 它還探索了性能優化技術,我

如何在Java中創建自定義網絡協議?如何在Java中創建自定義網絡協議?Mar 11, 2025 pm 05:52 PM

本文詳細介紹了創建自定義Java網絡協議。 它涵蓋協議定義(數據結構,框架,錯誤處理,版本控制),實現(使用插座),數據序列化和最佳實踐(效率,安全性,維護

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。