0

私はスレッドを練習しています、私はyield()を使用しました、私は以下のような出力を期待しています:(しかし、期待通りに得られません)

One1
Two1
One2
Two2
One3
Two3
.
.
.
.

以下のコードで何が問題になっていますか?

public class Main2 {

    public static void main(String[] args) {

        MyThread myThread1 = new MyThread("One");
        MyThread myThread2 = new MyThread("Two");

        /*Thread t1 = new Thread(myThread1);
        Thread t2 = new Thread(myThread2);

        t1.start();
        t2.start();*/


        myThread1.start();
        myThread2.start();
    }
}


class MyThread extends Thread {

    private String name; 

    public MyThread(String name) {
        this.name = name;
    }

    public void run(){

        for(int i=1;i<=20;i++) {
            System.out.println(name+i);
            yield();
        }
    }
}

また、コメントされたステートメントの使用が正しいかどうかを知りたいですか?私は以下を意味します:

Thread t1 = new Thread(myThread1);
Thread t2 = new Thread(myThread2);

t1.start();
t2.start();

お返事お待ちしております..

4

3 に答える 3

0

もしあなたがextend thread、あなたが持っている方法でそれを行います。あなたならimplements Runnable、コメントされた方法でそれを行います。どちらでも構いません。

yield実際には単なる推奨事項であるため、出力の順序は決定されないことに注意してください。常にそのようにしたい場合は、ロックまたは別の手法を使用する必要があります。

于 2013-09-02T04:51:45.187 に答える