0
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();
4

5 回答 5

6

“Born”不是我以前在 Java 中看到的与线程相关的正式术语。

Thread 对象在您调用时被构造/实例化/创建new cc("first")

当您调用t1.start(). 在此之前它仍然存在,但没有运行,并且不会被操作系统调度。

(PS Java 命名约定是类名以大写字母开头 - 阅读违反这一点的代码令人惊讶地令人困惑。 因为某种错误new cc(...)而对我跳出来。)

于 2012-08-02T11:31:07.783 回答
3

Thread is born at this point ?--> cc t1 = new cc("first");

此时线程处于Newalive

t1.start();

在这里,您的线程还活着,但可能处于Running/Runnable状态。

请参阅下面的 Java Doc 了解所有States.

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
于 2012-08-02T11:33:31.903 回答
1

如果你的词“天生”创建了新的线程对象,那么就是当你调用

新抄送(“第一”)

但是只有您使用启动线程时才会分叉一个线程进程

t1.start()

它是在实际准备好从调用线程的执行路径中运行的时候。

于 2012-08-02T11:36:03.120 回答
1

-在这一行cc t1 = new cc("first");线程对象将出现。

-在这一行 t1.start() toe执行线程)将被创建并分配一个 Runtime Stack.

于 2012-08-02T12:18:28.930 回答
0

写得不好的问题,但答案是它是在t1.start();阶段出生的。

于 2012-08-02T11:30:40.670 回答