新闻正文
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?