3

これが少し基本的な質問である場合は申し訳ありませんが、複数のスプライト ループを実行することを考えていました。初めて、両方の while(true) ループを使用してメインで 2 つのスレッドを作成しようとしました。私の意図: 2 つのスレッドを同時にループさせることです。ただし、プログラムを実行すると、実行の流れが中断されたように見え、2 番目のループは新しいスレッドで実行されず、スレッドの最初の無限 while() ループでプログラムがスタックして停止します。新しいスレッドを開始してから続行するのではなく、メインスレッドを実行しているだけだと思います。

私はそれを2つの方法で試しました:

スレッドで一度:

public class Zzz {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        r1 r = new r1();
        r2 a = new r2();
        r.start();
        a.start();
    }
}

public class r1 extends Thread {

    @Override
    public void start() {
        while(true) {
            System.out.println("r1");
            try {
                this.sleep(100);
            } catch (Exception ex) {

            }
        }
    }

}

public class r2 extends Thread {

    @Override
    public void start() {
        while(true) {
            System.out.println("r2");
                        try {
                this.sleep(100);
            } catch (Exception ex) {

            }
        }
    }

}

そしてRunnableで一度:

public class Zzz {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        r1 r = new r1();
        r2 a = new r2();
        r.run();
        a.run();
    }
}

public class r1 implements Runnable {

    @Override
    public void run() {
        while(true) {
            System.out.println("r1");
            try {
                Thread.sleep(100);
            } catch (Exception ex) {

            }
        }
    }

}

public class r2 implements Runnable {

    @Override
    public void run() {
        while(true) {
            System.out.println("r2");
                        try {
                Thread.sleep(100);
            } catch (Exception ex) {

            }
        }
    }

}

しかし、役に立たない。常に R1 でスタックします。アイデアはありますか?私はググってスレッドを見回しましたが、これがどこにもカバーされていません。

4

3 に答える 3

2

クラスr1とr2を次のように定義します。

public class Thread1 extends Thread {

@Override
public void run() {
    System.out.println("r1");
    try {
       this.sleep(100);
    } catch (Exception ex) {

    }        
 }

}

public class Thread2 extends Thread {

@Override
public void run() {
    System.out.println("r2");
    try {
      this.sleep(100);
    } catch (Exception ex) {
    }
}
}


public class ThreadTester {

    public static void main(String[] args) {
        Thread1 r = new Thread1();
        Thread2 a = new Thread2();
        r.start();
        a.start();
    }
}

Runnableの使用:

public class HelloRunnable implements Runnable {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new Thread(new HelloRunnable())).start();
    }

}

詳細については、 Javaのドキュメントを確認してください

于 2012-06-06T06:08:34.590 に答える
2

run メソッドをオーバーライドする必要があります & runnable の場合は Thread のインスタンスを作成する必要があります

public class MyThread extends Thread{
    @Override
    public void run() {
        while(true) {
            System.out.println("My Thread running");
        }

}

そしての場合Runnable

class MyRunnable implements Runnable{

             public void run(){
                         System.out.println("I am executing by Thread: " + Thread.currentThread().getName());
             }
 }

  Thread mythread = new MyThread();
  mythread.setName("T1");
  Thread myrunnable = new Thread(new MyRunnable());
  myrunnable.start();
于 2012-06-06T06:00:24.177 に答える
2

スレッドを開始するには、Threadから 2 つのを作成して開始する必要がありRunnableます。

Thread t1 = new Thread(r);
Thread t2 = new Thread(a);
t1.start();
t2.start();
于 2012-06-06T06:02:43.053 に答える