Некоторые вопросы, касающиеся метода Thread.yield(). То, что я понял, когда мы вызываем, Thread.Yield(), текущий поток будет возвращаться в состояние runnable. Поэтому в зависимости от потока нити планировщик потоков выполняет следующий поток с более высоким приоритетом. Теперь у меня есть одна примерная программа. См. Ниже.некоторые сомнения относительно yield()
package thread;
public class YieldTest implements Runnable {
@Override
public synchronized void run() {
System.out.println(Thread.currentThread().getName()+", executing..");
for(int i = 0 ; i <5;i++){
if(i==2){
Thread.yield();
System.out.println(Thread.currentThread().getName()+": "+i+" yielded()");
/*try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+": "+i+" yielded()");
} catch (InterruptedException e) {
e.printStackTrace();
}*/
}else{
System.out.println(Thread.currentThread().getName()+": "+i);
}
}
}
public static void main(String[] args) {
YieldTest test = new YieldTest();
Thread t1 = new Thread(test);
t1.setName("A");
t1.setPriority(9);
Thread t2 = new Thread(test);
t2.setName("B");
Thread t3 = new Thread(test);
t3.setName("C");
t2.setPriority(6);
t2.setPriority(4);
t1.start();
t2.start();
t3.start();
}
}
Здесь я получаю выход всегда следующим образом,
A, executing..
A: 0
A: 1
A: 2 yielded()
A: 3
A: 4
C, executing..
C: 0
C: 1
C: 2 yielded()
C: 3
C: 4
B, executing..
B: 0
B: 1
B: 2 yielded()
B: 3
B: 4
Теперь вопрос метод доходности() должен вернуться в runable состояние и другой поток должен выполнить. поэтому выход должен быть чем-то вроде следующим образом
A, выполнение .. А: 0 А: 1 А: 2 получают()
С, выполнение .. C: 0 C: 1 С: 2 дали()
A: 3
A: 4
В, выполнение .. Б: 0 Б: 1 Б: 2 получают()
C: 3
C: 4
B: 3
B: 4
Кроме того, что касается приоритета потока. Не гарантировано, почему нам нужен приоритет потока? Пожалуйста, исправьте меня, если я ошибаюсь.
Какую проблему вы действительно пытаетесь решить? Вызов 'yield()', вероятно, не лучшее решение. –
Подробнее о 'yield()' см. [Этот вопрос] (http://stackoverflow.com/questions/5156985/how-does-method-yield-work). – Pops
В этом конкретном случае я не удивлюсь, если поток А, завершенный до того, как B успел начать. – pap