早期的電腦中不包含作業系統,從頭到尾都只執行一個程序,而這個程式能存取電腦所有資源。隨著電腦發展,作業系統的出現,使得電腦可以同時運行多個程序,並且每個程序都在單獨的進程內運行。為什麼要這麼做呢?主要基於以下原因:
既然電腦由單一任務發展為多任務,那麼程式自然也可以從傳統的序列程式發展為並發程式。
串列程式的優點在於簡單直覺。但同樣地由於以上三個原因促使線程的出現。上述電腦可以在單獨的進程內運行程序,而線程允許在同一個進程內存在多個程序控制流,一個程序的多個線程還可以同時被多個CPU調度運行。這就等同於電腦同時執行多個程式(進程),程式同時執行多個執行緒。即進程內運行執行緒。
執行緒又稱輕量級進程。現如今的作業系統都是以線程為基本單位調度的。由於線程間共享資源,如果沒有明確的同步機制,就會導致線程間執行紊亂,資料錯誤或失效,導致異常。這通常也是並發程式設計的難度。
以我的觀點,所謂的並發程式設計就是對執行緒的運用。執行緒能將許多非同步工作流程轉換成串列工作流程,而並發程式設計便是在非同步情況下實現同步,使其符合需求。
那麼執行緒有哪些優點和風險呢?
執行緒能有效的降低程式開發與維護成本,提升效能。降低程式碼複雜度,更好模擬人類工作方法。
線程的支援是把雙面刃,並發程式的開發也給程式設計師帶來了更高的水平要求。
關於安全性有一個很好的例子:
value++;
只此一行程式碼,在單執行緒程式下完全沒有問題,但在多執行緒下可能會出現意想不到的後果。
執行此行程式碼分三步驟:1.讀取value值;2.value值加1;3.將加1的值賦回value。而程式中可能由多個執行緒交替執行,在此期間如果兩個執行緒同時讀出value,從而得到相同的值,又同時把它加1,結果就是不同執行緒獲得同樣的值。而我們的期望是這個數值被加了兩次。
每一個java程式都會使用線程,即時你在程式中沒有顯示地建立線程,使用的框架仍在建立線程,這些線程必須是線程安全的。
以上是JAVA的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!