public class thread extends Thread{ static int i=1; @Override public void run() { Thread.yield(); while(true) { if(method()){ break; } } } public static synchronized boolean method(){ try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } if(i<100){ if(i%2!=0) { System.out.println(currentThread().getName()+i); } i++; return false; } return true; } }为什么该代码的线程只进不出
时间: 2024-02-10 09:19:08 浏览: 113
在这段代码中,线程调用了`Thread.yield()`方法,这个方法会让当前线程放弃 CPU,让其他线程有机会执行。但是这个方法并不保证一定会让出 CPU,有可能当前线程仍然会继续执行。在这个例子中,线程进入了`while(true)`循环,如果`method()`方法返回`false`,那么线程会继续执行下去。因为这个方法中有一个`synchronized`关键字,所以只有一个线程能够进入这个方法执行。如果这个线程一直在执行这个方法,那么其他线程就会一直等待,从而导致“线程只进不出”的情况。
阅读全文