zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    对路径“E:AnyWiseUnitBusiXtCalXtCal.SiteMain”的访问被拒绝。
    CentOS Docker 安装
    linux命令检查网络问题
    MYSQL命令(二)
    极简技术简录-HTTP
    Java遍历List、Map的集合方法
    jdbc连接数据库并插入一条带有日期的数据
    MYSQL命令(一)
    JDBC连接MySQL数据库批量插入数据
    观察者模式
  • 原文地址:https://www.cnblogs.com/lenjava/p/3788734.html
Copyright © 2011-2022 走看看