什么是一个线程调用Java中的wait()之后做什么?(What does a thread do

2019-09-23 11:40发布

在多线程的程序,我怀疑,当一个线程等待(),它不会搞太多的CPU使用率,使CPU可以交换处理其他线程。

例如,100个线程开始相同的任务一起比较,50个线程实际上做任务,而其他50个线程等待,直到所有50个任务都完成。 后一种情况的成本比以前少得多的时间。

任何人都可以提出一些有关此读数?

Answer 1:

wait方法有两个目的:

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

每当一个方法做了synchronized块里面的东西,无论是在块必须等待被释放锁定的对象。

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



文章来源: What does a thread do after calling wait() in Java?