发布网友
共3个回答
热心网友
在Java语言中notifyAll()方法的实际作用如下:
1.notifyAll(): Wakes up all threads that are waiting on this object's monitor;
2.当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,则可以在同步方法中调用wait()方法,使本线程等待,并允许其它线程调用这个同步方法
3.其它线程在使用这个同步方法不需要等待,当它使用完这个同步方法时,用notifyAll()通知所有由于使用这个同步方法而处于等待的线程结束,再次使用这个同步方法
4.如果使第一个处于等待的线程结束等待,则调用方法notify()
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平*立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
热心网友
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
热心网友
notify(),notifyAll()都是要唤醒正在等待的线程,前者明确唤醒一个,后者唤醒全部。
当程序不明确知道下一个要唤醒的线程时,需要采用notifyAll()唤醒所有在wait池中的线程,让它们竞争而获取资源的执行权,但使用notifyAll()时,会出现死锁的风险,因此,如果程序中明确知道下一个要唤醒的线程时,尽可能使用notify()而非notifyAll()。
有问题欢迎提问,满意请采纳,谢谢!