当前位置:首页 » 编程语言 » java线程的notify

java线程的notify

发布时间: 2022-09-24 14:02:30

java多线程suspend,resume和wait,notify的区别

suspend,使线程进入停滞状态,除非收到resume消息,否则该线程不会变回可执行状态。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock;
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方 法要捕捉InterruptedException异常;
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候, 并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且 不是按优先级;
notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一 个对象的锁,而是让它们竞争。

② java线程中notify什么意思

每个对象都有一个监视器,wait和notify都必须针对同一个监视器,
Student中notify是通知在this上等待的线程,wait是让出this的监视器,等待其它线程在this上的通知
Teacher中wait是等待其它线程在this上的通知,而且也没有通知其它线程,与Student不对应
大致代码如下:
Student:
synchronized(Test.class)
{
while(true)
{
//do....
Test.class.notify();
Test.class.wait();
}
}
Teacher:
synchronized(Test.class)
{
Test.class.wiat();
//do....
Test.class.nofity();
}

③ JAVA多线程suspend,resume和wait,notify的区别

suspend,使线程进入停滞状态,除非收到resume消息,否则该线程不会变回可执行状态。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock;
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方
法要捕捉InterruptedException异常;
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,
并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且
不是按优先级;
notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一
个对象的锁,而是让它们竞争。

④ 如何在 Java 中正确使用 wait,notify 和 notifyAll


Java
中可以用
wait、notify

notifyAll
来实现线程间的通信。
1)利用wait()来让一个线程在某些条件下暂停运行。
例如,在生产者消费者模型中,生产者线程在缓冲区为满的时候,消费者在缓冲区为空的时
候,都应该暂停运行。
2)notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程。
3)
notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程。
举个简单的例子:假如有三个线程Thread1、Thread2和Thread3都在等待对象objectA的monitor,此时Thread4拥有对象objectA的monitor,当在Thread4中调用objectA.notify()方法之后,Thread1、Thread2和Thread3只有一个能被唤醒。
注意,被唤醒不等于立刻就获取了objectA的monitor。假若在Thread4中调用objectA.notifyAll()方法,则Thread1、Thread2和Thread3三个线程都会被唤醒,至于哪个线程接下来能够获取到objectA的monitor就具体依赖于操作系统的调度。

⑤ java线程中notify什么意思

每个对象都有一个监视器,wait和notify都必须针对同一个监视器,
Student中notify是通知在this上等待的线程,wait是让出this的监视器,等待其它线程在this上的通知
Teacher中wait是等待其它线程在this上的通知,而且也没有通知其它线程,与Student不对应
大致代码如下:
Student:
synchronized(Test.class) {
while(true) {
//do....
Test.class.notify();
Test.class.wait();
}
}
Teacher:
synchronized(Test.class) {
Test.class.wiat();
//do....
Test.class.nofity();
}

⑥ 关于JAVA中线程notify()方法的一些问题

在多线路程中经常用到。
当在一个线程A中执行
wait()后,这个线程就会处于等待状态。
如果想重新激活线程A,继续向下执行代码,就必须在另一个线程中来激活线程A
class
A
extends
Thread
{
public
void
run()
{
wait();
System.out.println("end");
}
public
synrhonized
void
abc()
{
notify();
}
}
class
B
extends
Therad
{
public
void
run()
{
synchronized(A){A.notify()};
//激活

A.abc();
//激活
}
}
上面的代码只是一个形式。

⑦ java中notify怎么使用

notify(),notifyAll()都是要唤醒正在等待的线程,前者明确唤醒一个,后者唤醒全部。
当程序不明确知道下一个要唤醒的线程时,需要采用notifyAll()唤醒所有在wait池中的线程,让它们竞争而获取资源的执行权,但使用notifyAll()时,会出现死锁的风险,因此,如果程序中明确知道下一个要唤醒的线程时,尽可能使用notify()而非notifyAll()。

⑧ java 线程 notify wait怎么用

1、如果一个线程调用了某个对象的wait方法,那么该线程进入到该对象的等待池中(并且已经将锁释放),
如果未来的某一时刻,另外一个线程调用了相同对象的notify方法或者notifyAll方法,
那么该等待池中的线程就会被唤起,然后进入到对象的锁池里面去获得该对象的锁,
如果获得锁成功后,那么该线程就会沿着wait方法之后的路径继续执行。注意是沿着wait方法之后
2.如果没有直接性的调用同类里的其他接口,或者返回,结束等java关键字,代码还是得往下执行的。

热点内容
算法牛 发布:2024-05-05 22:43:40 浏览:718
grublinux引导 发布:2024-05-05 22:37:56 浏览:214
unix高级编程第三版pdf 发布:2024-05-05 22:32:09 浏览:958
手机wap网站源码 发布:2024-05-05 22:27:44 浏览:259
python修改文件某一行 发布:2024-05-05 22:18:22 浏览:457
md5加密64 发布:2024-05-05 21:59:30 浏览:527
259pp页面访问升级 发布:2024-05-05 21:47:51 浏览:89
迅雷阻止上传 发布:2024-05-05 21:26:19 浏览:914
数据库运维题 发布:2024-05-05 21:21:47 浏览:962
RM魔塔编程 发布:2024-05-05 21:21:47 浏览:286