本博客 貓叔的博客,轉載請申明出處
前言
本系列將由淺入深,學習Java併發多線程。
一圖讀懂線程與進程
- 1、一個進程可以包含一個或多個線程。(其實你經常聽到“多線程”,沒有聽過“多進程”嘛)
- 2、進程存在堆和方法區
- 3、線程存在程序計數器和棧
- 4、堆佔最大內存,其爲創建時分配的,是多線程共享的,主要存放new創建的對象
- 5、方法區也是多線程共享的,主要存放類、常量、靜態變量
- 6、CPU的基本執行單位是線程(注意!不是進程)
- 7、由此,線程需要一個程序計數器記錄當前線程要執行的指令地址
- 8、當CPU的時間片用完,讓出後記錄當前執行地址,下次繼續執行(時間片輪詢)
- 9、只有執行Java代碼時pc技數器記錄的纔是下一條指令的地址,執行native方法,則記錄的是undefined地址
- 10、線程中的棧,只要存儲線程局部變量、調用棧幀
棧幀:C語言中,每個棧幀對應着一個未運行完的函數。棧幀中保存了該函數的返回地址和局部變量。
公衆號:Java貓說
現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不定期乾貨。