码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA中锁的使用

时间:2017-06-08 13:13:27      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:ant   操作   sig   test   public   void   方法   sync   await   

关系性锁:

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();

分布式锁:

JAVA中锁的使用

标签:ant   操作   sig   test   public   void   方法   sync   await   

原文地址:http://www.cnblogs.com/youzhongmin/p/6940383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!