www. On IT Road .com

wait()、notify()和notifyAll()方法

Java 中的 Object 类具有三个最终方法,它们允许线程就资源的锁定状态进行通信。

  • wait()
    它告诉调用线程放弃锁并进入睡眠状态,直到其他线程进入同一个监视器并调用 notify()wait()方法在等待之前释放锁,并在从 wait()方法返回之前重新获取锁。wait()方法实际上与同步锁紧密集成,使用同步机制无法直接提供的功能。
    换句话说,我们不可能纯粹在 Java 中实现 wait()方法。它是一种本地方法。
    调用 wait()方法的一般语法是这样的:
synchronized( lockObject )
{ 
	while( ! condition )
	{ 
		lockObject.wait();
	}

	//take the action here;
}
  • notify()
    它唤醒一个在同一个对象上调用 wait()的线程。应该注意的是,调用 notify()实际上并没有放弃对资源的锁定。它告诉等待线程该线程可以唤醒。但是,在通知程序的同步块完成之前,实际上不会放弃锁定。
    因此,如果通知程序对资源调用 notify(),但通知程序仍需要在其同步块内对该资源执行 10 秒的操作,则一直在等待的线程将需要至少再等待 10 秒释放对象锁定的通知程序,即使已经调用了 notify()
    调用 notify()方法的一般语法是这样的:
synchronized(lockObject) 
{
	//establish_the_condition;
	lockObject.notify();

	//any additional code if needed
}
  • notifyAll()
    唤醒在同一个对象上调用wait()的所有线程。在大多数情况下,优先级最高的线程将首先运行,但不能保证。其他与上面的“notify()”方法相同。
    调用 notify()方法的一般语法是这样的:
synchronized(lockObject) 
{
	establish_the_condition;
	lockObject.notifyAll();
}

通常,使用wait()方法的线程确认条件不存在(通常通过检查变量),然后调用wait()方法。
当另一个线程建立条件时(通常通过设置相同的变量),它会调用 notify()方法。
等待和通知机制没有指定具体的条件/变量值是什么。
在调用 wait()或者 notify()之前,开发人员可以指定要检查的条件。

Java wait()、notify()和notifyAll()方法

java wait 和 notify 之间的区别。

日期:2020-09-17 00:09:45 来源:oir作者:oir