多线程安全--生产者和消费者

    在多线程安全中,使用较多的例子是生产者和消费者模型。

    在这个模型中,生产者和消费者是两个独立的线程,但是他们操作的资源的共享的,生产者生产产品,消费者消费产品。假设资源用一个对象来抽象,该对象的set()和out()方法对应生产和消费,那么为了保证多线程安全,每次只能有一个生产者线程生产产品,即只有一个生产者线程可以调用set()函数,同样,每次只能有一个消费者消费产品,即只有一个消费者线程能调用out()函数,所以要加入同步机制,使用synchronized构造同步函数,或者使用jdk1.5之后的新特性,使用java.util.concurrent.locks包中的ReentrantLock和Condition来实现。

    Lock和Condition都是接口,Lock接口的方法比如lock()和unlock()代替了synchronized,Condition代替了Object监视器方法的使用。Condition子类对象是通过Lock的newCondiiton()产生的。Condition中有await()、signal()、signalAll()方法,分别代替Object中的wait()、notify()、notifyAll()。

    新旧特性对比:

    1)Lock的lock()和unlock()可以显式地加锁和解锁,而synchronized关键字并不能显式的加解锁。

    2)旧特性中,notify()和wait()必须对应一个锁才能进行唤醒操作,synchronized只对应一个锁,但是新特性中,一个Lock可以对应多个锁,可以创建多个监视器,每个监视器都可以进行线程的等待和唤醒操作,更灵活。

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值