Java yield()方法不起作用。 Netbeans Ubuntu 10.04

时间:2010-11-23 22:41:31

标签: java multithreading netbeans ubuntu

我在Ubuntu 10.04 x86_64上使用Netbeans 6.9.1在Java中使用Threads。我使用yield()方法时遇到问题,因为当我调用此方法时,当前线程继续运行而不是停止并让其他线程执行。

下面的代码是使用yield运行2个线程的简单示例。而不是运行第一个线程,打印一行然后停止线程,程序完成线程1然后运行thread2,因为没有调用方法yield。我在Windows上测试了这个代码,它运行得很好!所以我想知道在Ubuntu或64位平台上使用这种方法是否有任何问题。

有什么想法吗?提前谢谢。


//ThreadTest.java
public class ThreadTest extends Thread{
    public ThreadTest (String name){
        super(name);
    }
    public void run(){
        for (int i=0;i<5;i++){
            System.out.println(getName()+" - "+i);
            yield();
        }
        System.out.println(" END "+getName());
    }
}

//Main.java public class Main { public static void main(String[] args) { ThreadTest t1 =new ThreadTest("Thread1"); ThreadTest t2 =new ThreadTest("Thread2"); t1.start(); t2.start(); } }

2 个答案:

答案 0 :(得分:12)

yield只是要求安排另一个线程的请求。没有什么能阻止JVM或底层操作系统再次安排同一个线程。

答案 1 :(得分:1)

sun JDK 6JDK 7yield()方法的javadoc不同,您可能需要检查javadoc以查找您正在使用的JVM版本。