2012-08-02 51 views
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();     
    } 
} 

问题:那就是线程出生螺纹出生在Java启动

  • 在这一点上 - >cc t1 = new cc("first");
  • 抑或是出生,在这一点上开始 - >t1.start();

回答

6

“Born”不是我以前在Java中见过的与线程有关的正式术语。

线程对象是构造/实例化/创建当您拨打new cc("first")

线程本身是当您拨打t1.start()时开始。它在那之前依然存在,但没有运行,并且不会被操作系统调度。

(PS的Java命名约定是在该类名称开头大写字母 - 。这是令人惊讶的混乱阅读违反此代码new cc(...)跳出我的莫名其妙

+2

1顺便说一句线程已称为字段'stillborn') – 2012-08-02 11:36:53

+0

作为本地系统资源**的执行线程直到启动被调用**才会被创建。 – 2012-08-02 11:42:58

0

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

3

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

在这一点线程处于New状态,这是不alive

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 
1

如果你的话 “诞生” 新的线程对象的创建,那么当你调用

新的CC( “第一”)

但一个线程进程将分叉只有你使用

t1.start()

启动一个线程,它是在实际准备从调用线程运行到执行路径。

1

-在这一行cc t1 = new cc("first");线程对象将生成

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