Java Threads产生方法查询

时间:2013-09-02 04:46:30

标签: java multithreading

我正在练习线程,我使用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();

等待你的回复..

3 个答案:

答案 0 :(得分:1)

yield()方法在其javadoc中明确指出它是

  

提示当前线程愿意产生的调度程序   它目前使用的是处理器。调度程序可以忽略这一点   提示。

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

此外,在您的问题注释的语句是否正确使用,不,它不会改变任何东西。 Thread构造函数接受Runnable参数,最终将执行run()方法。 Threadimplements Runnable因此是一个有效的参数,但它与您启动Thread本身的效果相同。

答案 1 :(得分:0)

如果你extend thread,你可以按照自己的方式进行。如果您implements Runnable,则以评论方式执行此操作。无论哪种方式都没问题。

请注意,yield实际上只是一个推荐,因此您的输出顺序无法确定。如果你希望它始终以某种方式使用,你需要使用锁或其他技术。

答案 2 :(得分:0)

Thread#yield表示

  

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

所以你不会在这里获得预期的输出。 如果您希望预期输出使用wait()notify()方法并进行适当的同步 I would like to know does commented statements correct to use or not?
是的,这是100%有效的java语法。