開發(fā)中哪里用到多線程 實際工作中,什么場景會用到多線程開發(fā)?
最典型的應用程序,如tomcat、tomcat,是多線程的,數百個客戶機訪問同一個web應用程序。在Tomcat訪問之后,隨后的處理被拋出到一個新線程。新線程最終被調用到我們的servlet程序,比如
最典型的應用程序,如tomcat、tomcat,是多線程的,數百個客戶機訪問同一個web應用程序。在Tomcat訪問之后,隨后的處理被拋出到一個新線程。新線程最終被調用到我們的servlet程序,比如doGet或doPost。
如果我們不使用多線程機制,當數百人同時訪問一個web應用程序時,Tomcat將不得不排隊等待串行處理,因此客戶端根本無法忍受這種訪問速度。
還需要異步處理,您需要使用多線程。例如,任務a和任務B需要并行處理,單個線程只能串行處理。首先完成任務a,然后執(zhí)行任務B,如果要同時執(zhí)行多個任務,必須為每個任務分配一個線程,然后通過Java虛擬機的線程調度,同時執(zhí)行多個任務。例如,如果您的CPU是多核的,那么您可以讓CPU執(zhí)行一個線程。如果只有一個CPU,底層基于分時復用的原則,每個線程根據時間片獲得CPU資源。
實際工作中,什么場景會用到多線程開發(fā)?
下面簡要說明以下原因:
鎖定是因為操作不是原子的。讓我們用操作一來解釋它??聪旅鎯蓚€圖。
我這個操作需要
看上面的第二個圖,你能很清楚地理解這個過程嗎?
鎖定是為了確保上述三個步驟是原子操作。
回到問題上來,只有一個線程要寫,沒有競爭,所以不需要鎖定。
但是,如果你看第一張圖片,因為主內存和本地內存的存在
在一個線程寫入后,其他線程無法立即看到它。這就是可見性問題。
添加volatile關鍵字后,它將在操作后強制工作內存和主內存同步,以確保其他線程可以立即看到它。