线程同步的方法
来源:互联网 发布:java线程源码 编辑:程序博客网 时间:2024/05/18 13:45
wait():作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。
调用wait方法需要注意几点:
第一点:wait被调用的时候必须在拥有锁(即synchronized修饰的)的代码块中。
第二点:恢复执行后,从wait的下一条语句开始执行,因而wait方法总是应当在while循环中调用,以免出现恢复a执行后继续执行的条件不满足却继续执行的情况。
第三点:若wait方法参数中带时间,则除了notify和notifyAll被调用能激活处于wait状态(等待状态)的线程进入锁竞争外,在其他线程中interrupt它或者参数时间到了之后,该线程也将被激活到竞争状态。
第四点:wait方法被调用的线程必须获得之前执行到wait时释放掉的锁重新获得才能够恢复执行。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
synchronized关键字:
第一点:synchronized用来标识一个普通方法时,表示一个线程要执行该方法,必须取得该方法所在的对象的锁。
第二点:synchronized用来标识一个静态方法时,表示一个线程要执行该方法,必须获得该方法所在的类的类锁。
第三点:synchronized修饰一个代码块。类似这样:synchronized(obj) { //code…. }。表示一个线程要执行该代码块,必须获得obj的锁。这样做的目的是减小锁的粒度,保证当不同块所需的锁不冲突时不用对整个对象加锁。利用零长度的byte数组对象做obj非常经济。
- 线程的同步-同步方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- 线程同步的方法
- Spring3MVC+Mybatis快速使用
- String, StringBuffer, StringBuilder三者区别
- c#-ADO.NET链接数据库
- Centos7上Docker仓库Harbor的搭建
- 求三角形面积-gyy
- 线程同步的方法
- 线段树入门
- java单例模式的实现方式
- java提高篇(二三)-----HashMap
- 这可能是最全的?Redis?集群方案介绍了
- POJ 3414 Pots
- 欢迎使用CSDN-markdown编辑器
- Tegra Debugger/SnapProfiler/Intel GPA
- linux 小工具: tmux