class cc extends Thread {
cc(String s) {
super(s);
}
}
class mainn {
public static void main (String args[]) {
cc t1 = new cc("first");
t1.start();
}
}
问题:线程是否已经诞生
cc t1 = new cc("first");
t1.start();
?答案 0 :(得分:6)
“Born”不是我之前在Java中看到的与线程相关的正式术语。
当您致电new cc("first")
时,Thread对象构建/实例化/创建。
当您致电t1.start()
时,线程本身已启动。它在此之前仍然存在,但未运行,并且不会由操作系统安排。
(PS Java命名约定是类名以大写字母开头 - 读取违反此代码的代码令人惊讶。new cc(...)
以某种方式跳出来错误。)
答案 1 :(得分:3)
Thread is born at this point ?--> cc t1 = new cc("first");
此时线程处于New
状态,而不是alive
t1.start();
这里你的线程还活着但可能处于Running/Runnable
状态。
请参阅以下所有States
的Java文档。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.State.html
示例强>
public static void main(String[] args) {
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("running");
}
}
});
System.out.println(t1.isAlive());
t1.start();
System.out.println(t1.isAlive());
}
打印哪些:
false
true
running
答案 2 :(得分:1)
如果你的单词“天生”创建新的线程对象,那么就是当你调用
时新cc(“第一次”)
但只有你使用
启动一个线程,才会分叉一个线程进程t1.start()
当它实际准备好从调用线程执行的路径中运行时。
答案 3 :(得分:1)
- 在此行cc t1 = new cc("first");
线程对象将会存在。
- 在此第t1.start()行,toe
(执行线程)将创建并分配 Runtime Stack.
答案 4 :(得分:0)
写得不好的问题,但答案是它出生在t1.start();
阶段。