一毅桃、什么是線程
? ? 首先在了解線程時苫费,了解什么是進程:進程是代碼在數(shù)據(jù)集合上的一次運行活動 珍手, 是系統(tǒng)進行資源分配和調度的基本單位办铡。
? ? 那么線程又是什么呢?線程則是進程的一個執(zhí)行路徑琳要, 一個進程中至少有一個線程寡具,進程中的多個線程共享進程的 資源。線程是進程中的一個實體稚补,線程本身是不會獨立存在的童叠。(但cpu資源是被分配到線程中的)
? ? 舉個例子:在使用main啟動程序時,啟動了一個JVM進程课幕,其中main函數(shù)就是一個線程拯钻,還有比方說垃圾回收線程。
二撰豺、線程的結構
? ??一個進程中有多個線程,多個線程共享進程的堆和方法區(qū)資源拼余,但是每個線程有自己的程序計數(shù)器和棧區(qū)域 污桦。
? ??程序計數(shù)器是一塊內存區(qū)域,用來記錄線程當前要執(zhí)行的指令地址 匙监。因為cpu一般使用輪轉方式被線程占用凡橱,當一次線程運行一段時間運行下一個線程時,程序計數(shù)器記錄當前線程的執(zhí)行地址亭姥。
? ? 每個線程都有其棧資源稼钩,存儲該線程局部變量。而堆是進程中最大的一塊內存达罗,堆是被進程中的所有線程共享的坝撑,是進程創(chuàng)建時分配的,堆里面主要存放使用new 操作創(chuàng)建的對象實例 粮揉。方法區(qū)則用來存放 NM 加載的類巡李、常量及靜態(tài)變量等信息,也是線程共享的 扶认。
? ? 三侨拦、線程的生命周期
分為 :? 新建 New? ?就緒 Runnable? ?運行 Running? ? 阻塞 Blocked? ? ?死亡 Dead
? ?