快速业务通道

探索Java同步机制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
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

探索Java同步机制 - 编程入门网

线程如果获得监视锁成功,将成为该监视者对象的拥有者。在任一时刻内,监 视者对象只属于一个活动线程 (Owner) 。拥有者线程可以调用 wait 方法自动释 放监视锁,进入等待状态。

示例

在本节,我们将用 Java Monitor 来重新解决用 C++ 实现的生产者 / 消费者 模式问题。

清单 8. Message Class

public class Message {    private static int OBJ_COUNT = 0;    public int obj_index_;    Message(){      synchronized(Message.class) {        OBJ_COUNT++;        obj_index_ = OBJ_COUNT;      }    }    @Override    public String toString() {      return "message["+obj_index_+"]";    } }

探索Java同步机制(8)

时间:2011-07-08 IBM 李三红

清单 9. MessageQueue Class

public class MessageQueue { private int message_count_;    private int max_messages_;    private Message[] buffer_;    private int in_ = 0, out_ = 0;    public MessageQueue(int max_messages) {      max_messages_  = max_messages;      message_count_ = 0;      buffer_     = new Message[max_messages_];    }    synchronized boolean full () {    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号