[發明專利]一種獲取線程標識的方法、裝置、介質和電子設備有效
| 申請號: | 201911031675.1 | 申請日: | 2019-10-28 |
| 公開(公告)號: | CN110888773B | 公開(公告)日: | 2023-06-06 |
| 發明(設計)人: | 劉洪凱 | 申請(專利權)人: | 北京字節跳動網絡技術有限公司 |
| 主分類號: | G06F11/30 | 分類號: | G06F11/30 |
| 代理公司: | 北京國昊天誠知識產權代理有限公司 11315 | 代理人: | 馬瑞 |
| 地址: | 100041 北京市石景山區*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 獲取 線程 標識 方法 裝置 介質 電子設備 | ||
本公開提供了一種獲取線程標識的方法、裝置、介質和電子設備。所述方法包括:獲取保存初始線程標識的初始標識地址相對于初始線程對象地址的參考偏移值;獲取目標線程對象地址;計算所述目標線程對象地址和所述參考偏移值的和,獲取目標標識地址;讀取所述目標標識地址的值,獲取目標線程標識。本公開利用JAVA程序的本地層準確地獲取在linux下線程對象的tid,從而避免了tid出錯的情況。
技術領域
本公開涉及計算機技術領域,具體而言,涉及一種獲取線程標識的方法、裝置、介質和電子設備。
背景技術
在安卓系統中,有時需要獲取linux系統下一個java線程對應的線程id值(即tid)。比如,當向目標線程發送信號時,需要知道目標線程在linux下的tid。但是,java語言并沒有提供公開獲取線程的tid的方法。
通常,一個進程內的所有線程都在“/proc/self/task”目錄下存在對應的子目錄,子目錄名稱即為該線程的線程標識(英文全稱thread?identity,簡稱tid)。所以,現有技術一般是通過讀取“/proc/self/task”目錄,得到當前進程內所有線程的tid,然后讀取“/proc/self/task/[tid]/”下的comm文件得到一個線程的名字。由此可枚舉出該進程內的所有線程的tid和線程名。當在java層獲取線程名之后,根據線程名去查找對應的tid即可。
但是,現有方法存在以下缺點:
1、“/proc/self/task/[tid]/”下的comm文件中存儲的字符個數是受限的(通常最多能夠存儲15個有效字符),如果兩個線程的線程名前半段相同,就容易找錯tid;
2、由于java允許存在兩個完全相同的線程名,從而使現有的方法在尋找tid的過程中更加容易出錯。
發明內容
提供該發明內容部分以便以簡要的形式介紹構思,這些構思將在后面的具體實施方式部分被詳細描述。該發明內容部分并不旨在標識要求保護的技術方案的關鍵特征或必要特征,也不旨在用于限制所要求的保護的技術方案的范圍。
本公開的目的在于提供一種獲取線程標識的方法、裝置、介質和電子設備,能夠解決上述提到的至少一個技術問題。具體方案如下:
根據本公開的具體實施方式,第一方面,本公開提供一種獲取線程標識的方法,應用于JAVA進程的本地層,包括:
獲取保存初始線程標識的初始標識地址相對于初始線程對象地址的參考偏移值;
獲取目標線程對象地址;
計算所述目標線程對象地址和所述參考偏移值的和,獲取目標標識地址;
讀取所述目標標識地址的值,獲取目標線程標識。
根據本公開的具體實施方式,第二方面,本公開提供一種獲取線程標識的裝置,包括JAVA進程的本地層模塊,所述本地層模塊包括:
獲取參考偏移值單元,用于獲取保存初始線程標識的初始標識地址相對于初始線程對象地址的參考偏移值;
獲取目標線程對象地址單元,用于獲取目標線程對象地址;
獲取目標標識地址單元,用于計算所述目標線程對象地址和所述參考偏移值的和,獲取目標標識地址;
獲取目標線程標識單元,用于讀取所述目標標識地址的值,獲取目標線程標識。
根據本公開的具體實施方式,第三方面,本公開提供一種計算機可讀存儲介質,其上存儲有計算機程序,所述程序被處理器執行時實現如第一方面任一項所述獲取線程標識的方法。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京字節跳動網絡技術有限公司,未經北京字節跳動網絡技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911031675.1/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種用于波浪滑翔器翼板的制作模具
- 下一篇:深度測量裝置及方法





