关于线程wait方法
来源:互联网 发布:制作明信片的软件 编辑:程序博客网 时间:2024/06/05 00:12
今天遇到疑问,为什么如上图的线程不能唤醒wait。于是去CSDN提问和自己查资料,原来我这里只有一个线程,这里应该至少有两个同步的线程。于是我把代码改成这样。
这样,线程0就可以被唤醒。执行完。
那我这里是把线程1延迟了三秒钟,如果不延迟,也能得到线程0唤醒,不过估计你要多刷几遍了。
那这里线程1延迟三秒起到三秒作用了呢?
其实就是在等待线程0走到“我要暂停了...”这一步,让线程0处于执行wait()后的状态--阻塞态。 因为这里循环的次数只有300次,以计算机的计算速度,很多时候在你还没有执行到wait的时候,就循环完300次了。这样,然后它再去wait(),其实这时候线程1已经执行完毕,只剩线程0和main守护线程,线程0也就不能被唤醒了。
这里打印出当前线程是:线程0
之后我又做了这样的试验。
在线程0里去唤醒线程0,你们觉得可以吗?
事实上是可以的。那其实这时候,sleep(3000)就没有什么意义了。但是这里同样需要线程0在线程1执行完之前走到wait方法,那其实这里又引发了一个疑问,这时候线程1都已经完成了,并且notify方法是在线程0里执行的,它是怎么跳转过去的?
所以这里我觉得线程0并不是由线程1唤醒,而且从notify的前缀就能看出来,是我们同步锁的对象。wait()只是把线程0无限阻塞,等待唤醒,等线程1执行完毕,释放对象锁,然后线程0由对象唤醒,由阻塞态-->就绪态-->运行态。 当然这一切都不能少了两个线程,至少需要两个同步的线程。
不知道我的想法对不对。欢迎指正
0 0
- 关于线程wait方法
- 关于sleep()、yield()、wait()三种让线程暂停方法的区别
- 关于Java wait()方法
- 线程 wait()方法----------------------------很重要
- java 线程 wait() notify() 方法
- 线程wait( )、sleep( )、notify( )方法
- 线程wait( )、sleep( )、notify( )方法
- java关于线程的sleep(),yield(),join(),wait(),notify(),notifyAll()等方法的总结
- 关于线程同步通信 wait() notify() notifyAll()
- 线程:sleep()、wait()、yield()和join()方法
- 线程中的wait和notify方法
- wait notify notifyall 线程同步方法简述
- Java线程_Notify,NotifyAll,Wait方法
- 线程sleep()、wait()、yield()、join()方法 解析
- 线程中的wait和notify方法
- 线程:sleep()、wait()、yield()和join()方法
- java线程wait,notify,yield,join方法
- 14.5 wait和notify方法 停止线程
- 码农该如何提高英文水平
- Java容器学习笔记(一)
- UVA - 1584 Circular Sequence(水)
- POJ 2986 A Triangle and a Circle(计算几何)
- Linux下MySQL5.6的修改字符集编码为UTF8
- 关于线程wait方法
- <mvc:annotation-driven/>
- 【Effective Objective-C 2.0读书笔记】第七章:系统框架
- spark storage相关配置
- 我的天,我写的博客哪里去了
- java socket编程
- 安卓初学:MultiAutoCompleteTextView多文本匹配总结
- Java的反射机制
- 使用Eclipse构建Maven项目 (step-by-step)