【问题标题】:What does a thread do after calling wait() in Java?在 Java 中调用 wait() 后线程会做什么?
【发布时间】:2012-10-04 01:07:37
【问题描述】:

在多线程程序中,我怀疑当一个线程 wait() 时,它不会占用太多 cpu 利用率,以便 cpu 可以交换以处理其他线程。

例如,100 个线程一起启动同一个任务,而 50 个线程实际执行该任务,而其他 50 个线程等待直到所有 50 个任务完成。 后一种情况比前一种情况花费的时间要少得多。

谁能推荐一些关于这个的读物?

【问题讨论】:

  • 呃,它在等待吗?等待通知的任何内容?

标签: java multithreading synchronization


【解决方案1】:

wait方法有两个目的:

  1. 它将告诉当前正在执行的线程进入睡眠状态(不使用任何 cpu)。
  2. 它将释放锁,以便其他线程可以唤醒并获取锁。

每当一个方法在同步块中做某事时,块中的任何东西都必须等待被锁定的对象被释放。

synchronized (lockObject) {
    // someone called notify() after taking the lock on
    // lockObject or entered wait() so now it's my turn

    while ( whatineedisnotready) {
        wait(); // release the lock so others can enter their check
        // now, if there are others waiting to run, they 
        // will have a chance at doing so.
    }
}

必读:

java synchronized

【讨论】:

  • 我想知道的是cpu对等待线程做了什么以及如何做。但是您的回答确实有一些帮助。我仍然需要一些读数来证明线程何时等待,它不使用任何 cpu :)
  • 我很好奇这个问题,你有没有得到答案?
猜你喜欢
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2012-10-24
  • 2019-04-10
  • 2011-08-05
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多