Lock锁

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lock锁相关的知识,希望对你有一定的参考价值。

理论整理
1.Lock是显式锁(手动开启,手动关闭,千万不能忘记关闭锁),synchronized是隐式锁,出了作用域会自动释放;
2.Lock只能锁代码块,synchronized可以锁代码块和方法;
3.ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语言,在实现线程安全的控制中,比较常用的是ReentrantLock,因为它可以显式加锁和释放锁
代码实践

public class Text {
    public static void main(String[] args) {
        Ticks ticks = new Ticks();
        new Thread(ticks).start();
        new Thread(ticks).start();
        new Thread(ticks).start();
    }
}
//模拟抢票
class Ticks implements Runnable{
    int tickenum = 10;
    //定义lock锁
    private final ReentrantLock lock = new ReentrantLock();
    @Override
    public void run() {
         while (true){
              try {
                  lock.lock();//实现lock锁
                 if(tickenum>0){
                     try {
                         Thread.sleep(1000);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
                     System.out.println(tickenum--);
                 }else{
                     break;
                 }

              }finally {
                  //释放锁
                  lock.unlock();
              }

         }
    }
}

以上是关于Lock锁的主要内容,如果未能解决你的问题,请参考以下文章

java并发线程锁技术的使用

Java多线程——Lock&Condition

并发包java.util.concurrent.locks.Lock

java中ReentrantReadWriteLock读写锁的使用

静态方法内的同步块将获取类级别锁或对象级别锁

Java多线程与并发库高级应用-工具类介绍