簡史
早期的電腦中不包含作業系統,從頭到尾都只執行一個程序,而這個程式能存取電腦所有資源。隨著電腦發展,作業系統的出現,使得電腦可以同時運行多個程序,並且每個程序都在單獨的進程內運行。為什麼要這麼做呢?主要基於以下原因:
2.公平性 不同的使用者與程式對電腦有相同的使用權,透過時間分片每個程式共享資源,而不是等待上一個程式運行結束再啟動下一個程式。
3.便利性 每個程式單獨運行,必要時相互通信,比一個程式完成所有任務更容易實現。
既然電腦由單一任務發展為多任務,那麼程式自然也可以從傳統的序列程式發展為並發程式。
串列程式的優點在於簡單直覺。但同樣地由於以上三個原因促使線程的出現。上述電腦可以在單獨的進程內運行程序,而線程允許在同一個進程內存在多個程序控制流,一個程序的多個線程還可以同時被多個CPU調度運行。這就等同於電腦同時執行多個程式(進程),程式同時執行多個執行緒。即進程內運行執行緒。
執行緒又稱輕量級進程。現如今的作業系統都是以線程為基本單位調度的。由於線程間共享資源,如果沒有明確的同步機制,就會導致線程間執行紊亂,資料錯誤或失效,導致異常。這通常也是並發程式設計的難度。
以我的觀點,所謂的並發程式設計就是對執行緒的運用。執行緒能將許多非同步工作流程轉換成串列工作流程,而並發程式設計便是在非同步情況下實現同步,使其符合需求。
那麼執行緒有哪些優點和風險呢?
執行緒優勢
執行緒能有效的降低程式開發與維護成本,提升效能。降低程式碼複雜度,更好模擬人類工作方法。
優勢2.降低建模難度 一直做同一件事總比做多件事來的簡單。利用線程吧程序任務細化,多任務分給多線程,每個線程任務單一,必要時相互通信,比單線程來回切換任務花銷更小。
優勢3.簡化非同步事件處理 當一個請求發出等待回應時,整個程式都要等待嗎?這就意味著其他請求都將停頓。就好比聊天時必須對方回覆才能說下一句話,這顯然是不合理的。如果給每個請求一個線程處理,線程獨立不相互影響,解決了問題。當然如果聊天回覆時必須知道對方說的話,注意線程安全。
優勢4.回應更敏捷的使用者介面傳統GUI程式是單執行緒的,如果其中一個使用者事件處理時間過長,整個程式將處於卡死狀態,使得使用者體驗變差。如果把一些耗時操作分給一個獨立線程,其他事件依舊有線程處理,變會使得使用者介面流暢。
線程風險
線程的支援是把雙面刃,並發程式的開發也給程式設計師帶來了更高的水平要求。
風險2.活躍性問題 活躍性的定義是「某件正確的事情一定會發生」。單線程中無限循環便是活躍性問題。如果線程A等待線程B釋放所持有的資源,線程B一直沒有釋放,則線程A將一直等待下去,這便是活躍性問題。
風險3.效能問題 效能則是「正確的事情盡快發生」。好的並發設計會提升效能,反之則會降低效能,畢竟啟動執行緒也是要消耗資源的。
關於安全性有一個很好的例子:
value++;
只此一行程式碼,在單執行緒程式下完全沒有問題,但在多執行緒下可能會出現意想不到的後果。
執行此行程式碼分三步驟:1.讀取value值;2.value值加1;3.將加1的值賦回value。而程式中可能由多個執行緒交替執行,在此期間如果兩個執行緒同時讀出value,從而得到相同的值,又同時把它加1,結果就是不同執行緒獲得同樣的值。而我們的期望是這個數值被加了兩次。
每一個java程式都會使用線程,即時你在程式中沒有顯示地建立線程,使用的框架仍在建立線程,這些線程必須是線程安全的。
以上是JAVA的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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