关于JAVA线程的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/27 04:40:27
代码如下:
public class ThreadDemo extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
printThreadName();
}
}

public void printThreadName() {
System.out.println("The Thread name is "
+ Thread.currentThread().getName() + ": " + this.getState());
}

public static void main(String[] args) {
ThreadDemo ttsn = new ThreadDemo();
ttsn.setName("Created One");
ttsn.start();

for (int i = 0; i < 5; i++) {
ttsn.printThreadName();
}
}
}
运行之后,会有一行这样的输出:
The Thread name is main: RUNNABLE
为何currentThread().getName()已经指出当前线程是main的情况下,this.getState()会是Runnable状态?

多运行几次就会知道,那个状态完全是不规则的。这个程序会同时存在两个线程,一个是ttsn,一个是main,而程序没有指定优先级,CPU分配线程的时候是按照默认级别来处理的,这个时候就会有一定的随机性,所以状态就是不规则。

cpu给所有Runnable状态的线程分配时间片
所以同一个时间内可能有很多个Runnable的线程,但是只有一个被分配了时间片。
单纯从单词的意思来看也可以解释,Runnable的意思是可运行的,可运行跟正在运行是两码事

你把for循环改大一点看看情况。5太小了。

知道楼为什么提问了。你打印这个,就知道了。

this.getState()+"-----"+this.getName()