一、概念
多線程的Java應(yīng)用程序:為了讓每個線程正常工作就提出了程序計數(shù)器(Programe Counter Register),每個線程都有自己的程序計數(shù)器這樣當線程執(zhí)行切換的時候就可以在上次執(zhí)行的基礎(chǔ)上繼續(xù)執(zhí)行,僅僅從一條線程線性執(zhí)行的角度而言,代碼是一條一條的往下執(zhí)行的,這個時候就是程序計數(shù)器;JVM就是通過讀取程序計數(shù)器的值來決定下一條需要執(zhí)行的字節(jié)碼指令,進而進行選擇語句、循環(huán)、異常處理等;
二、舉例
1.生活案例
比如老王正在看片,他看到三十五分鐘的時候,突然他的QQ好友蒼老師給他開視頻,這時候肯定打斷他看片了,假設(shè)蒼老師和他視頻完了,他肯定要接著他那35分鐘的進度去繼續(xù)看,這時候他怎么知道我看到35分鐘了?這時候程序計數(shù)器就起了作用,他負責管理進度。
2.代碼層面
將上面的例子轉(zhuǎn)換成代碼,是這樣的:
A線程正在執(zhí)行HelloWorld.class的第三十五行。這時候CPU時間片被B線程搶走了,當A線程重新被分配到時間片時,他怎么知道我的class運行到哪了?這時候他可以看程序計數(shù)器在哪個位置。
三、總結(jié)
程序計數(shù)器作用不多說了,我個人感覺他是為了多線程而生的,單線程情況下完全不需要他。從案例中不難發(fā)現(xiàn),程序計數(shù)器是每個線程獨有的,并非線程共享的!
若有興趣,歡迎來加入群,【Java初學者學習交流群】:458430385,此群有Java開發(fā)人員、UI設(shè)計人員和前端工程師。有問必答,共同探討學習,一起進步!
歡迎關(guān)注我的微信公眾號【Java碼農(nóng)社區(qū)】,會定時推送各種干貨:
