博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA中锁的使用
阅读量:5154 次
发布时间:2019-06-13

本文共 1269 字,大约阅读时间需要 4 分钟。

关系性锁:

Lock:

  锁可以保证线程的执行是安全的,使线程在执行时,只有执行完一个线程才能执行其他线程。任何时刻只有一个线程才能进入临界区,一旦一个线程封锁了锁对象,其他线程将无法通过lock语句。锁是可重入的,线程可以重复获得持有的锁。锁保持一个持有计数来跟踪锁的嵌套调用。每一次调用lock都要调用unlock来释放锁。

  1、基本步骤   

  Lock myLock = new ReentrantLock();

  public void method(){

    myLock.lock();

    try{

      ........

      }

      finally{

      myLock.unlock();

      }

  2、条件对象

    当线程在执行前会获得一个条件对象,此时会判断该线程在执行时,会判断是否符合条件,如果不符合执行条件,会进入阻塞队列,等待其他线程执行其他程序,使阻塞队列的线程唤醒。唤醒之后,退出同步方法。

    public Class LockTest{

      Lock myLock = ReentrantLock();

      Condition sufficient = myLock.newCondition();

    public void method(){

      myLock.lock();

      try{

        while(条件){

          sufficient.await();

          }

        .........

        sufficient.signalAll();

        }

        finally{

          myLock.unlock();

          }

      }  

synchronized关键字: 

       synchronized是一个内部锁,每一个对象都含有该锁,同时可以使用wait()来阻塞不符合条件的线程,使用notifyAll解除所有阻塞的锁。

    使用步骤:

    public void synchronized method(){

      while(条件){

        wait();

        }  

        .......

      notifyAll();

      }

读/写锁:

    写锁只允许一个线程在操作,读锁允许所有读线程进行操作。

    ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

    Lock read = lock.readLock();

    Lock write = lock.writeLock();

分布式锁:

转载于:https://www.cnblogs.com/youzhongmin/p/6940383.html

你可能感兴趣的文章
Android中百度地图开发细节综述
查看>>
centos7 手动修改dns
查看>>
SSH新学,关于面向对象的看法
查看>>
WMS和WMTS的区别
查看>>
【转载】C++ 值传递、指针传递、引用传递详解
查看>>
决策树之C4.5算法
查看>>
git清理工作区
查看>>
20169214 2016-2017-2 《网络攻防实践》第五周学习总结
查看>>
对对象中的属性赋值(两种方法)
查看>>
开源自己写的一个拖拽库,兼容到IE8+
查看>>
mvc中的表现和数据分离怎么理解?
查看>>
启动elasticsearch报错
查看>>
Socket详解
查看>>
Java-004-变量类型和修饰符详解
查看>>
JAVA字符串格式化-String.format()的使用
查看>>
[原创]windows 部署SS server 出现的错误.
查看>>
mysql 索引
查看>>
第13组_16通信3班_045_OSPFv3作业
查看>>
调试相关连接资源
查看>>
lftp用法手册
查看>>