La méthode Java yield () ne fonctionne pas. Netbeans Ubuntu 10.04

Je travaille avec des threads en Java en utilisant Netbeans 6.9.1 sur Ubuntu 10.04 x86_64. J’ai un problème en utilisant la méthode yield () car lorsque j’appelle cette méthode, le thread en cours continue à fonctionner au lieu de s’arrêter et de laisser les autres threads s’exécuter.

Le code ci-dessous est un exemple simple pour exécuter 2 threads en utilisant le rendement. Au lieu d’exécuter le premier thread, imprimez une ligne puis arrêtez le thread, le programme termine le thread 1, puis exécute thread2, car le rendement de la méthode n’est pas appelé. J’ai testé ce code sous Windows et cela fonctionne parfaitement! Je me demande donc s’il existe un problème pour utiliser cette méthode sur Ubuntu ou sur les plates-formes 64bits.

Une idée? Merci d’avance.

//ThreadTest.java public class ThreadTest extends Thread{ public ThreadTest (Ssortingng 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(); } } 

//ThreadTest.java public class ThreadTest extends Thread{ public ThreadTest (Ssortingng 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(); } }

yield est simplement une demande pour qu’un autre thread soit programmé. Rien n’empêche la JVM ou le système d’exploitation sous-jacent de planifier à nouveau le même thread.

La méthode javadoc for yield() dans sun JDK 6 et JDK 7 est différente, vous devrez peut-être vérifier le javadoc pour la version de JVM que vous utilisez.