Java基础——多线程(4)

接上次的  生产者,消费者案例。

 

这次的目的是为了解决多线程多任务效率问题

 

使用了JDK1.5 java.util.concurrent.locks包中的对象。

Lock接口,它的出现比synchronized有更多的操作。

lock(); 获取锁    unlock();释放锁

同步代码块或者同步函数的锁操作是隐式的。

JDK1.5,Lock接口按照面向对象的思想,将锁单独封装成一个对象。

Lock类型的对象(接口实现类,创建对象后为Lock类型的对象)。

以前的锁对象是任意的,现在固定了,面对Lock类型的对象。并提供了显示的锁操作。

Lock接口就是同步的代替。

1、将线程中的同步更换为Lock接口的形式。

(记得要导入包 import java.util.concurrent.locks.*)

Lock lock = new Reentrantlock();

(并不是想使用实现类特有的方法,多态提升为Lock类型)

 

替换后失败了。因为wait()没有了同步区域,没有了所属的同步锁。

同步升级了,其中锁已经不是任意对象了,而是Lock类型的对象。那么和任意对象绑定的监视器方法是不是也升级了,有了专门和Lock类型锁绑定的监视器方法呢???

查阅API,Condition接口替代了Object中的监视器方法

以前的监视器方法封装到每一个对象当中。

现在的监视器方法单独封装到了Condition类型对象中。

方法为: await();   signal();  signalAll();

 

JDK1.4     synchronized(obj){                                                                      JDK1.5  Lock lock = new Reentrantlock();

        obj.wait();                                                                                       void show(){

        obj.notify();                                                                                            lock.lock();

     }                                                                                                                    lock.unlock();

                                                                                                                              }

obj作为锁,内部本身就有了监视器的方法。(直接封装到锁里面)                                        Contiditon

                                                                                                                      lock.new Condition();

转载于:https://www.cnblogs.com/lenjava/p/3788734.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值