并发编程复习(四):wait和notify解析
发布日期:2021-11-13 10:21:43 浏览次数:2 分类:技术文章

本文共 1417 字,大约阅读时间需要 4 分钟。

首先本篇文章要说的是:wait方法会释放当前锁对象,但是notify不会释放锁,可能你并未理解什么意思,上代码:

public class MyThread6 {
private volatile List list = new ArrayList<>();
public void add() {
list.add("主席");
}
public int getSize() {
return list.size();
}
public static void main(String[] args) {
MyThread6 myThread6 = new MyThread6();
 Object obj = new Object();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj) {
for(int i=0;i<10;i++){
myThread6.add();
System.out.println("线程" + Thread.currentThread().getName() + "添加了一个元素");
try {
Thread.sleep(1000);
if (myThread6.getSize() == 5) {
System.out.println("发出通知");
obj.notifyAll();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
},"t1");
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj) {
if(myThread6.getSize()!=5){
try {
obj.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("收到通知");
throw new RuntimeException();
}
}
});
thread2.start();
thread.start();
}}

输出结果:

线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素发出通知线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素收到通知Exception in thread "Thread-0" java.lang.RuntimeException
at cn.lh.bf.MyThread6$2.run(MyThread6.java:61)
at java.lang.Thread.run(Thread.java:745)

可以看见,虽然发送通知了(notify方法运行),但是当前锁并未释放,而是只要线程t1运行结束释放锁之后线程2才收到通知,抛出异常。

转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78043552 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:并发编程复习(五):CountDownLatch
下一篇:并发库编程复习(三):volatile解析二

发表评论

最新留言

表示我来过!
[***.200.74.241]2022年05月27日 17时06分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

hdu1058 Humble Numbers--DP 2019-07-31 20:31:46
hdu1421 搬寝室--DP 2019-07-31 20:31:46
hdu1257 最少拦截系统--DP 2019-07-31 20:31:45
hdu2830 Matrix Swapping II--DP 2019-07-31 20:31:45
hdu2870 Largest Submatrix--DP 2019-07-31 20:31:44
hdu1505 City Game--DP/栈 2019-07-31 20:31:43
hdu1506 Largest Rectangle in a Histogram--DP/栈 2019-07-31 20:31:43
hdu2845 Beans--DP 2019-07-31 20:31:42
hdu2577 How to Type---DP 2019-07-31 20:31:42
hdu1159 Common Subsequence--DP 2019-07-31 20:31:41
hdu1176 免费馅饼--DP 2019-07-31 20:31:40
hdu1069 Monkey and Banana--DP 2019-07-31 20:31:40
hdu2571 命运--DP 2019-07-31 20:31:39
hdu1087 Super Jumping! Jumping! Jumping!--DP 2019-07-31 20:31:39
hdu1003 Max Sum--DP 2019-07-31 20:31:38
hdu1231 最大连续子序列--DP 2019-07-31 20:31:37
hdu3068 最长回文--Manacher算法 2019-07-31 20:31:37
hdu3336 Count the string--KMP+DP 2019-07-31 20:31:36
hdu2087 剪花布条--KMP 2019-07-31 20:31:36
hdu1358 Period--KMP 2019-07-31 20:31:35