引入:设计模式
上篇文章中咱们讨论了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