浅谈sleep方法和wait方法的异同
来源:互联网 发布:淘宝质量好点的aj高仿 编辑:程序博客网 时间:2024/06/03 21:46
在我学到多线程技术这里时,感到sleep方法和wait方法二者给我造成了一些困惑,所以我在此将二者小小地总结
一下,希望对大家有所帮助。
sleep方法和wait方法异同点是什么?
相同点:
二者都可以让线程处于冻结状态。不同点:
首先应该明确sleep方法是Thread类中定义的方法,而wait方法是Object类中定义的方法。1,sleep方法必须人为地为其指定时间。
wait方法既可以指定时间,也可以不指定时间。
wait方法如果没有被设置时间,就必须要通过notify或者notifyAll来唤醒。
3,sleep方法不一定非要定义在同步中。
wait方法必须定义在同步中。
4,当二者都定义在同步中时,
线程执行到sleep,不会释放锁。
线程执行到wait,会释放锁。针对以上4点,这里举一个小例子:
假设此时在wait方法上可能有多个线程例如Thread0、Thread1、Thread2,他们都被存储到了线程池中,同时将
锁放掉。与此同时,Thread3开始执行下方的同步代码块,当Thread3执行到notifyAll时,0、1、2三个线程都将被唤
醒。此时,在同步中就同时存在多个线程,那么此时会引发多线程的安全问题吗?
答案是不会的,因为在同步中的线程如果想要执行,不但要有执行权,还必须要持有锁,而此时锁在Thread3手
中,所以只有当Thread3执行完代码释放了锁后,其他线程才有机会拿到锁继续执行。
看到这里我们可以拓展出一个问题:当一个线程进入一个对象的一个synchronized方法后,其他线程是否可
以进入此对象的其他方法?
这个问题的答案分为以下几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的同
步锁是this。
个人感觉,在学习多线程这部分的知识时,弄清楚何时拿锁,何时放锁,是极为重要的。
- 浅谈sleep方法和wait方法的异同
- 浅谈sleep方法和wait方法的异同
- Java中sleep和wait方法的异同点
- sleep方法和wait方法的区别
- 关于wait和sleep方法的区别
- sleep()和wait()方法的区别
- sleep()和wait()方法的区别
- java中sleep和wait的异同
- 浅谈Java多线程中的Thread.sleep()和wait()方法的区别
- 多线程——改变线程的名字(setPriority(int)方法、toString()方法以及wait方法和sleep方法的异同点)
- Thread的sleep方法和wait方法的区别
- Java中sleep方法和wait方法的区别
- wait()方法和 sleep()方法的区别是什么?
- Java中的wait()方法和sleep()方法的区别是什么?
- java 中的 wait()方法和 sleep()方法的区别是什么?
- java 中的 wait()方法和 sleep()方法的区别是什么?
- java 中的 wait()方法和 sleep()方法的区别
- java 中的 wait()方法和 sleep()方法的区别
- 通读cheerio API
- 33. vmstat
- Ural 1303 Minimal Coverage(贪心)
- xlistview的使用
- Can I debug relocated code at source-level with DS-5 Debugger?
- 浅谈sleep方法和wait方法的异同
- 架构师必看:谈软件架构师如何做好架构设计(上)
- CentOS 6搭建局域网NTP服务器
- 分片IP报文攻击
- Android7.0适配教程,心得
- Java-反射(一) Class类的使用
- C 和指针第一次考试(改正)
- C语言学习—数组
- python生成器——廖雪峰教程笔记