📅  最后修改于: 2023-12-03 14:54:49.892000             🧑  作者: Mango
本题目涉及Java程序开发中的多线程。
在Java中,线程的状态分为五种:New、Runnable、Blocked、Waiting、Timed Waiting和Terminated。以下哪种方法不能让线程从Waiting状态到Runnable状态转换?
A. Object.notify()
B. Thread.interrupt()
C. Object.notifyAll()
D. Thread.yield()
本题考查了Java多线程的相关状态和线程状态转换的知识点。
根据题干,我们知道需要排除不能让线程从Waiting状态到Runnable状态转换的方法。线程的状态转换需要依靠jdk提供的api,这里我们分别分析一下正确答案。
该方法会唤醒一个因调用Object.wait()而处于等待状态的线程,该线程会由等待状态进入就绪状态,等待JVM调度执行。因此A选项不是本题的正确答案。
该方法是一个线程中断的方法,如果当前线程不是Waiting状态,这个方法不会有任何的效果,因此B选项也不是答案。
该方法会唤醒所有的因调用Object.wait()而处于等待状态的线程,这些线程都会由等待状态进入就绪状态,等待JVM调度执行。因此C选项也不是本题的答案。
该方法是一个线程让出CPU的方法,使当前线程从运行状态进入就绪状态,等待JVM调度执行。因此D是本题正确答案。
因此本题答案为选项D。
public class YieldExample {
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start();
}
}
class MyRunnable implements Runnable {
public void run() {
for(int i=0; i<10; i++) {
System.out.println(Thread.currentThread().getName()+"运行 "+i);
if(i==5) {
Thread.yield();
}
}
}
}
这是一个简单的Java多线程程序,如果执行到i=5时,当前线程会调用Thread.yield()方法将CPU让出,进入就绪状态等待JVM调度执行。