帮忙解释一下java中类的notify的含义,多谢了

guard是一个类,请问下面的代码是什么意思? 我要用c++来实现这段代码,请问应该如何实现呢? 多谢了! synchronized(guard) { guard.notify(); }

1、notify()方法的含义:

(1)notify()方法是随机唤醒一个线程,将等待队列中的一个等待线程从等待队列中移到同步队列中。

(2)在执行完notify()方法后,当前线程不会马上释放该对象锁,呈wait状态的线程也不能马上获得该对象锁。

要等到执行notify方法的线程将程序执行完 ,也就是退出sychronized代码块后,当前线程才会释放锁。而在同步队列中的该线程才可以获取该对象锁。

2、对象所释放的三个场景:

(1)执行完同步代码块就会释放对象锁;

(2)在执行代码块的过程中,遇到异常而导致线程终止,也会释放对象锁;

(3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放对象锁,而此线程对象会进入线程等待池中,等待被唤醒。

扩展资料

Java中notify和notifyAll的区别:

Java提供了两个方法notify和notifyAll来唤醒在某些条件下等待的线程,你可以使用它们中的任何一个,但是Java中的notify和notifyAll之间存在细微差别,这使得它成为Java中流行的多线程面试问题之一。

当你调用notify时,只有一个等待线程会被唤醒而且它不能保证哪个线程会被唤醒,这取决于线程调度器。

虽然如果你调用notifyAll方法,那么等待该锁的所有线程都会被唤醒,但是在执行剩余的代码之前,所有被唤醒的线程都将争夺锁定,这就是为什么在循环上调用wait。

因为如果多个线程被唤醒,那么线程是将获得锁定将首先执行,它可能会重置等待条件,这将迫使后续线程等待。

因此,notify和notifyAll之间的关键区别在于notify()只会唤醒一个线程,而notifyAll方法将唤醒所有线程。



温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-15
synchronized(guard) 是一个对象锁、用于代码同步、就是一个锁、
第2个回答  推荐于2017-09-07
notify()是java所有对象都具有的方法,继承子object类并且为final,不能重载。
其作用是唤醒一个等待的线程,时序一般是这样:

Thread t = new Thread( new Runnable()
public void run()
{
....

synchronized(guard)

{

guard.wait();//此处调用后该线程不再活动,置于等待状态,切换到其他线程运行

}
}
)
guard.notify(); 调用后虚拟机可选择任何一个调用了guard.wait()的线程投入运行,选择顺序不由代码控制,由虚拟机实现。

如果是notifyAll(),则唤醒所有等待的线程运行。

如果是用c++代码,一般要用到pthread库
pthread_cond_init创建一个所谓的等待条件,
可以在任何时间调用pthread_cond_wait进入等待,相当于调用guard.wait(),
其他线程可以调用pthread_cond_signal唤醒,相当于notify
还可以调用pthread_cond_braodcast,相当于notifyAll本回答被提问者和网友采纳
第3个回答  2017-09-07
“继承子object类并且为final,不能重载。” 如果是final类,应该是不能被重写。