新闻正文

Thread Mutex|Synchronize 小结

来源:JAVA天堂  JAVA学习者  2007-8-7 01:58:06 网友评论 0 条 字体:[ ] ~我要投稿!

================================
Thread Mutex|Synchronize /YZW
================================
概念
--互斥:同一时刻对同一个资源进行有限制的访问.
同步:对不同资源的访问有着明确的顺序.
状态转换
------ Schedule
(Runnable) <--------------> (Running)-------- ^ | |
| | *
| synchronized wait()
acquire lock | |
| | |
| | |

| (Blocked in ) | ( Blocked in )
-------- ( object"s )<----- ( object"s )
( lock pool )<--------------- ( wait pool )
1.Runnable可运行状态(在Runnable池中,只差CPU),由于使用synchronized而
阻塞的线程就会对象锁(object"s lock pool)池中等待.
2.同步的线程中调用wait()后,线程则会在wait池(wait pool)中等待.
注意:wait()方法执行时说明当前线程在运行(running),也肯定拥有对象锁.
3.调用wait()方法进入阻塞状态,当前线程将释放对象锁.
4.notify()或notifyAll()方法唤醒此线程时,它将进入object"s lock pool
池中等待,以重新获得对象锁.
实例:生产者消费者
------------------class MessageBoard {
{
private String message;
private boolean ready = false;(信号灯)
public synchronized String read()
{
while (ready == false)
{
try{
wait();
}catch(InterruptedException e){
}
}
ready = false;
notify(); //起始状态先写后读
return message;
}
public synchronized void write(String s)
{
while (ready == true)
{
try{
wait();
}catch (InterruptedException e){
}
}
message = s;
ready = true;
notify();
}
}
notify: 唤醒正在等待同一个监视器的线程.
wait: 让当前线程等待
read: 读信息之前先等待,直到信息可读,读完后通知要写的线程.
write: 写信息之前先等待,直到信息被取走,写完后通知要读的进程


※ 修改:·calmwater 於 05月01日02:31:59 修改本文


收藏到ViVi   收藏此页到365Key
上一篇: Java Thread 小结
下一篇: 怎样把string类的数转换为double?
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享