永发信息网

新手问个Java中线程wait方法的一个问题

答案:4  悬赏:70  手机版
解决时间 2021-03-11 20:42
  • 提问者网友:兔牙战士
  • 2021-03-11 11:58
新手问个Java中线程wait方法的一个问题
最佳答案
  • 五星知识达人网友:罪歌
  • 2021-03-11 13:00
楼上是胡扯,看以下代码,运行结果显示,是主线程在等待。
public class Test {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread() {
public void run() {
while (true) {
System.out.println("次线程运行中");
threadSleep();
}
}
};
t.start();
synchronized (t) {
t.wait();
}
while (true) {
System.out.println("主线程运行中");
threadSleep();
}
}
private static void threadSleep() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
全部回答
  • 1楼网友:老鼠爱大米
  • 2021-03-11 15:36

是子线程等待
调用谁的wait() 方法就是谁等待,然后可调用主线程的notify方法唤醒子线程继续执行,否则子线程一直等待,直到程序关闭!
(其实还有sleep方法可以用)

 
--希望等帮到你!!
  • 2楼网友:梦中风几里
  • 2021-03-11 14:13
wait()是用来锁定一个对象的,在调用这个notify()方法前,他后面的代码永远不会被执行。这种锁定不能够自动解锁, 你必须在另一个线程中调用这个对象的notify()方法。
你的代码,如果执行了else里面的代码,则notify()不会执行,而能执行notify()说明else里面的代码没有被执行,注意,notify()一定是在另外一个线程中调用的,用wait()这样的锁是不可能在自己的线程中解锁的。
http://blog.csdn.net/zyplus/article/details/6672775
  • 3楼网友:雾月
  • 2021-03-11 14:02
负责任的告诉你 是 主线程在等待。
看 API wait():
在其他线程调用此对象的 notify() 方法或 notifyAll()
方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。
当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或
notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。
API 已经很明确说了,导致当前线程等待。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯