线程学习

[size=18][/size][color=red][/color]今天学习了一下线程的一点东东,总结一下:首先Thinking in java上说线程存在4种状态:新建、可运行、死亡以及阻塞,但我觉得还有一个运行状态,这样整个过程才完整了。新建是指线程实例化,可运行就是我们通常start()方法调用,而运行就是run()方法执行了,死亡就是run()结束,至于阻塞状态就比较特别了,是在run()方法还没有结束,由于其它原因造成当前线程放弃cpu执行而进入的一种等待状态。造成阻塞的几种可能:1、线程sleep()方法,使线程进入睡眠状态;2、suspend()方法同样会造成线程暂停,但只有在resume()方法才能唤醒;3、wait()方法使当前线程停止,当外部条件成熟(时间到、或notify()方法调用),线程从新可行;4、等待一个IO流操作执行完成;5、等待其它线程的锁。
而stop、suspend方法已经被禁止使用。stop会造成对象状态的不连续性而使程序出现错误且难以定位。suspend与resume对的最大问题是容易造成死锁。
通过wait、notify、notifyAll方法进行等待、唤醒相对于sleep的优势是sleep并不释放当前获得得锁,而wait会释放。

wait、notify是Object里的方法,也就是在调用时都需要获取该对象的锁且在同步块(方法)中才能调用。一般是通过一个线程处理对象的消费,另一个对象处理对象的生产。在无“商品”可消费时,消费线程等待,到存储线程又生产了,再通过notify、notifyAll唤醒线程。这边注意notify、notifyAll都不能保证唤醒的线程就能马上运行。这是线程最大的特点:不可预见性,完全由JVM控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值