探索Java同步机制 - 编程入门网
essage> at the tail.
put_i (msg);
// Notify any thread waiting in <get> that the queue has at least one <Message>.
not_empty_.notify ();
} // Destructor of <guard> releases <monitor_lock_>.
Message Message_Queue::get () {
// Use the Scoped Locking idiom to acquire/release the <monitor_lock_> upon
// entry/exit to the synchronized method.
Guard<Thread_Mutex> guard (monitor_lock_);
// Wait while the queue is empty.
while (empty_i ()) {
// Release <monitor_lock_> and suspend the
// calling thread waiting for a new <Message> to
// be put into the queue. The <monitor_lock_> is
// reacquired automatically when <wait> returns.
not_empty_.wait ();
}
// Dequeue the first <Message> in the queue and update the <message_count_>.
Message m = get_i ();
// Notify any thread waiting in <put> that the
// queue has room for at least one <Message>.
not_full_.notify ();
return m;
} // Destructor of <guard> releases <monitor_lock_>.
bool Message_Queue::empty_i () const {
return message_count_ == 0;
}
bool Message_Queue::full_i () const {
return message_count_ == max_messages_;
}
Message_Queue::~Message_Queue() {
}
探索Java同步机制(7)时间:2011-07-08 IBM 李三红Monitor Object Java 实践 认识 Java Monitor Object Java Monitor 从两个方面来支持线程之间的同步,即:互斥执行与协作。 Java 使用对象锁 ( 使用 synchronized 获得对象锁 ) 保证工作在共享的数据集 上的线程互斥执行 , 使用 notify/notifyAll/wait 方法来协同不同线程之间的 工作。这些方法在 Object 类上被定义,会被所有的 Java 对象自动继承。 实质上,Java 的 Object 类本身就是监视者对象,Java 语言对于这样一个典 型并发设计模式做了内建的支持。不过,在 Java 里,我们已经看不到了我们在 C++ 一节所讨论的区域锁与条件变量的概念。下图很好地描述了 Java Monitor 的工作机理。 图 2. Java Monitor 线程如果获得监视锁成功,将成为该监视者对象的拥有者。在任一时刻内,监 视者对象只属于一个活动线程 (Owner) 。拥有者线程可以调用 wait 方法自动释 放监视锁,进入等待状态。 示例 在本节,我们将用 Java Monitor 来重新解决用 C++ 实现的生产者 / 消费者 模式问题。 清单 8. Message Class
探索Java同步机制(8)时间:2011-07-08 IBM 李三红清单 9. MessageQueue Class
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |