6

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

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

任何人都可以建议一些关于这个的阅读吗?

4

1 回答 1

4

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同步的

于 2012-10-04T01:47:28.583 回答