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

「生まれ」は、スレッドに関連する 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");

この時点で、スレッドはNewそうではない状態にありますalive

t1.start();

ここであなたのスレッドは生きていますが、Running/Runnable状態にあるかもしれません。

すべてについては、以下のJavaDocを参照してください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

あなたの言葉が「生まれた」新しいスレッドオブジェクトの作成である場合、それはあなたが呼び出すときです

new cc("最初")

ただし、スレッドプロセスは、使用してスレッドを開始するだけでフォークされます

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 に答える