linux kvm查看线程状态,kvm线程-005-线程状态-THREAD_JUST_BORN
在kvm內(nèi)部定義了線程狀態(tài),如下:
enum {
THREAD_JUST_BORN = 1, /* 還沒(méi)有啟動(dòng)*/
THREAD_ACTIVE = 2, /* 當(dāng)前正在運(yùn)行,或者在等待運(yùn)行的隊(duì)列中*/
THREAD_SUSPENDED = 4, /* 等待monitor或者alarm */
THREAD_DEAD = 8, /* 線程退出 */
THREAD_MONITOR_WAIT = 16, // 等待鎖
THREAD_CONVAR_WAIT = 32, // 等待喚醒
THREAD_DBG_SUSPENDED = 64 // debug使用
} state; // 線程狀態(tài)定義
1
2
3
4
5
6
7
8
9
本文首先介紹THREAD_JUST_BORN. THREAD_JUST_BORN是在BuildThread方法中設(shè)置的:
newThread->state = THREAD_JUST_BORN;
1
而關(guān)于該方法在kvm啟動(dòng)流程-006 中詳細(xì)介紹.
而B(niǎo)uildThread的調(diào)用點(diǎn)有兩處:
在InitializeThreading方法中調(diào)用,這點(diǎn)在kvm啟動(dòng)流程-006 中有介紹.
在getVMthread中調(diào)用,其代碼如下:
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
而關(guān)于 getVMthread方法的調(diào)用點(diǎn)有三處:
Java_java_lang_Thread_start(也就是Thread.start()方法)
Java_java_lang_Thread_setPriority0(也就是Thread.setPriority() 方法)
Java_java_lang_Thread_interrupt0(也就是Thread.interrupt()方法)
那么,哪個(gè)是首先調(diào)用 getVMthread方法的呢?
答案是 Java_java_lang_Thread_setPriority0,因?yàn)樵摲椒ㄊ窃诰€程的方法中調(diào)用的.如下:
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
因此會(huì)在方法中最終調(diào)用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)); // 獲得當(dāng)前線程對(duì)象
// 設(shè)置優(yōu)先級(jí)
javaThread->priority = (priority > MAX_PRIORITY ? MAX_PRIORITY :
(priority < MIN_PRIORITY ? MIN_PRIORITY : priority));
VMthread = getVMthread(&javaThread); // 獲得vm線程
VMthread->timeslice = javaThread->priority * TIMESLICEFACTOR; // 分配時(shí)間片
END_TEMPORARY_ROOTS
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
總結(jié)
THREAD_JUST_BORN 是線程新建的狀態(tài)。
關(guān)于后續(xù)狀態(tài),后文介紹
總結(jié)
以上是生活随笔為你收集整理的linux kvm查看线程状态,kvm线程-005-线程状态-THREAD_JUST_BORN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: concat php,php基于conc
- 下一篇: python爬虫常见报错_对Python