3

プログラムでスレッドを開始すると、他のすべてが停止します。

これは私のスレッドコードです...

static Thread b1 = new Thread(new Builders());
b1.run();
System.out.println("done");

これがクラスBuildersです。

public class Builders implements Runnable {

    static boolean busy=false;
    Random r = new Random();

    public void run() {
        try{
            busy=true;
            System.out.println("ready");
            Thread.sleep(9999);
            busy=false;
            System.out.println("done");
        }
        catch(Exception e){
        }
    }
}

プログラムを実行すると、スレッドが開始され、プログラムはスレッドの終了を待ちます。スレッドの主なポイントは、コードを同時に実行できることだと思いました。誰かが私が間違っていることを理解するのを手伝ってくれませんか。

4

3 に答える 3

8

これは、スレッドがstart()ではなくで開始され、現在のスレッドでメソッドをrun()呼び出すだけだからです。runしたがって、次のようになります。

static Thread b1 = new Thread(new Builders());
b1.start();
System.out.println("done");
于 2012-05-07T15:04:24.037 に答える
2

これは、スレッドを開始していないためです。代わりに、を呼び出してスレッドのコードを同期的run()に実行しています。start()代わりに電話する必要があります。

さらに良いことに、executorsを使用する必要があります。

于 2012-05-07T15:05:09.513 に答える
1

start()メソッドを呼び出す必要があります。Threadの内部コードは、メソッドを呼び出す新しいオペレーティングシステムスレッドを開始しますrun()。自分自身を呼び出すことrun()で、スレッド割り当てコードをスキップし、現在のスレッドで実行するだけです。

于 2012-05-07T15:09:08.447 に答える