线程诞生并从java开始

时间:2012-08-02 11:29:27

标签: java multithreading

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

5 个答案:

答案 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();阶段。