Java线程生成方法查询

Java线程生成方法查询,java,multithreading,Java,Multithreading,我正在练习线程,我使用了yield(),我希望输出如下:(但没有得到预期的结果) 我下面的代码有什么问题? public class Main2 { public static void main(String[] args) { MyThread myThread1 = new MyThread("One"); MyThread myThread2 = new MyThread("Two"); /*Thread t1 = new T

我正在练习线程,我使用了yield(),我希望输出如下:(但没有得到预期的结果)

我下面的代码有什么问题?

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();
        }
    }
}
等待您的答复。

方法
yield()
在其javadoc中清楚地声明它是

提示调度程序当前线程愿意让步 它当前使用的处理器。调度程序可以随意忽略此项 暗示

因此,您不能总是期望执行传递给另一个线程。没有保证


另外,在你的问题中,评论的语句是否正确使用,不,它不会改变任何东西。
Thread
构造函数接受一个
Runnable
参数,它最终将在该参数上执行
run()
方法。
线程
实现可运行
,因此是一个有效的参数,但它的效果与启动
线程
本身的效果相同。

如果
扩展线程
,则按照现有方式执行。如果
实现了Runnable
,则可以按注释方式执行。两种方式都可以

请注意,
yield
实际上只是一个建议,因此输出的顺序并不确定。如果您希望始终保持这种特定方式,则需要使用锁或其他技术。

指出

使当前正在执行的线程对象暂时暂停并允许其他线程执行

所以在这里你不会得到预期的输出。 如果需要预期的输出,请使用具有适当同步的
wait()
notify()
方法。
我想知道注释的语句是否正确使用?


是的,这是100%有效的java语法。

您得到的不是预期的输出,而是什么?
yield
应该用作测试工具,而不是逻辑工具。“我正在练习线程,我使用了yield()”-失败。
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();