1
package threadwork;

public class WorkingWithThreads implements Runnable {

    public static void main(String[] args) {
        WorkingWithThreads wwt = new WorkingWithThreads();
    }

    public WorkingWithThreads() {
        System.out.println("Creating Thread");
        Thread t = new Thread();
        System.out.println("Starting Thread");
        t.start();
    }

    @Override
    public void run() {
        System.out.println("Thread Running");

        for (int i = 0; i < 5; i++) {
            System.out.println("Thread:" + i);
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

このコードを実行すると、スレッドの作成とスレッドの開始が出力されます。ただし、スレッド実行は出力されません。つまり、実行関数はまったく呼び出されません。なんでそうなの?

4

2 に答える 2

2

start()スレッドを開始するには、スレッドを呼び出す必要があります。例えば

Thread t = new Thread();
t.start();

拡張する場合Threadは、新しいスレッドを作成し、次のstart()ように呼び出します。

new MyThread().start();

あなたは拡張Threadしていませんが、あなたのクラスは以下を実装しているのでRunnable

new Thread(new WorkingWithThreads()).start();
于 2011-04-17T05:36:29.063 に答える
0

私があなたの立場にあった場合、私は次のようにメイン内のスレッドを開始します:

public static void main(String[] args) {
  WorkingWithThreads wwt = new WorkingWithThreads();
  System.out.println("Creating Thread");
  Thread tzero = new Thread(wwt);
  System.out.println("Starting thread");
  tzero.start();
}

コンストラクターをWorkingWithThreads空のままにします。

public WorkingWithThreads() {
  System.out.println("Creating Runnable");
}

一般に、Threadのコンストラクターの内部を作成することはお勧めできませんWorkingWithThreads。ランナブル(つまり、のインスタンス)は、のインスタンスに渡すWorkingWithThreadsに完全に構​​築する必要があるためです。Thread

于 2011-04-17T05:49:28.120 に答える