引入:設計模式
上篇文章中咱們討論了Agent利用環境指針訪問VM的線程操做,這裏討論線程組操做。jvm
分類3:線程組操做ide
a.GetTopThreadGroups.讓Agent獲取VM中的全部全局的線程組。函數
jvmtiError GetTopThreadGroups(jvmtiEnv* env, jint* group_count_ptr, jthreadGroup** groups_ptr)
函數會返回全局的線程組的數量和線程組的列表。線程
b.GetThreadGroupInfo。獲取某個線程組的信息。設計
typedef struct { jthreadGroup parent; char* name; jint max_priority; jboolean is_daemon; } jvmtiThreadGroupInfo;jvmtiError GetThreadGroupInfo(jvmtiEnv* env, jthreadGroup group, jvmtiThreadGroupInfo* info_ptr)
從這裏能夠看出,它會包含線程組的父親,線程組名字(UTF-8格式),最大優先級,是否守護線程組等信息。指針
c.GetThreadGroupChildren.獲取某指定線程組的孩子們。it
jvmtiError GetThreadGroupChildren(jvmtiEnv* env, jthreadGroup group, jint* thread_count_ptr, jthread** threads_ptr, jint* group_count_ptr, jthreadGroup** groups_ptr)
由於線程組和線程的關係也遵照設計模式中的Composite Design Pattern.因此某個線程組的孩子能夠是子線程組,也能夠是一些活着的子線程。因此這裏能夠看出,它會返回子線程的數量,子線程列表,子線程組數量,子線程組列表。io