日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux kvm查看线程状态,kvm线程-005-线程状态-THREAD_JUST_BORN

發布時間:2025/3/11 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux kvm查看线程状态,kvm线程-005-线程状态-THREAD_JUST_BORN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在kvm內部定義了線程狀態,如下:

enum {

THREAD_JUST_BORN = 1, /* 還沒有啟動*/

THREAD_ACTIVE = 2, /* 當前正在運行,或者在等待運行的隊列中*/

THREAD_SUSPENDED = 4, /* 等待monitor或者alarm */

THREAD_DEAD = 8, /* 線程退出 */

THREAD_MONITOR_WAIT = 16, // 等待鎖

THREAD_CONVAR_WAIT = 32, // 等待喚醒

THREAD_DBG_SUSPENDED = 64 // debug使用

} state; // 線程狀態定義

1

2

3

4

5

6

7

8

9

本文首先介紹THREAD_JUST_BORN. THREAD_JUST_BORN是在BuildThread方法中設置的:

newThread->state = THREAD_JUST_BORN;

1

而關于該方法在kvm啟動流程-006 中詳細介紹.

而BuildThread的調用點有兩處:

在InitializeThreading方法中調用,這點在kvm啟動流程-006 中有介紹.

在getVMthread中調用,其代碼如下:

THREAD getVMthread(JAVATHREAD_HANDLE javaThreadH)

{

/* Create the VM-level thread structure if necessary */

THREAD VMthread = unhand(javaThreadH)->VMthread;

if (!VMthread) {

VMthread = BuildThread(javaThreadH);

}

return VMthread;

}

1

2

3

4

5

6

7

8

9

而關于 getVMthread方法的調用點有三處:

Java_java_lang_Thread_start(也就是Thread.start()方法)

Java_java_lang_Thread_setPriority0(也就是Thread.setPriority() 方法)

Java_java_lang_Thread_interrupt0(也就是Thread.interrupt()方法)

那么,哪個是首先調用 getVMthread方法的呢?

答案是 Java_java_lang_Thread_setPriority0,因為該方法是在線程的方法中調用的.如下:

public Thread() {

init(null, "Thread-" + nextThreadNum());

}

private void init(Runnable target, String name) {

Thread parent = currentThread();

this.target = target;

this.name = name.toCharArray();

this.priority = parent.getPriority();

setPriority0(priority);

}

private native void setPriority0(int newPriority);

1

2

3

4

5

6

7

8

9

10

11

12

13

因此會在方法中最終調用Java_java_lang_Thread_setPriority0方法,其代碼如下:

void Java_java_lang_Thread_setPriority0(void)

{

int priority = popStack();

THREAD VMthread;

START_TEMPORARY_ROOTS(http://www.amjmh.com)

DECLARE_TEMPORARY_ROOT(JAVATHREAD, javaThread,

popStackAsType(JAVATHREAD)); // 獲得當前線程對象

// 設置優先級

javaThread->priority = (priority > MAX_PRIORITY ? MAX_PRIORITY :

(priority < MIN_PRIORITY ? MIN_PRIORITY : priority));

VMthread = getVMthread(&javaThread); // 獲得vm線程

VMthread->timeslice = javaThread->priority * TIMESLICEFACTOR; // 分配時間片

END_TEMPORARY_ROOTS

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

總結

THREAD_JUST_BORN 是線程新建的狀態。

關于后續狀態,后文介紹

總結

以上是生活随笔為你收集整理的linux kvm查看线程状态,kvm线程-005-线程状态-THREAD_JUST_BORN的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。