Lock锁 与 synchronized 比较

2020-11-30  本文已影响0人  何几时

Lock

定义:更强大的线程同步机制--显式定义同步锁对象来实现同步

特点:

  1. 在JUC(java.util.concurrent)包里
  2. ReentrantLock 实现了 Lock,和 synchronized 有相同的作用

synchronizedLock 的对比

使用方法

class A implements Runnable{
    private void m() {
        try{
            lock.lock();  // 上锁
                          // 实际工作的代码    
        } finally {
            lock.unlock();  // 防止忘了关锁!!!
        }
    }
}

示例代码,抢票程序

package demo04_synchronized;

import java.util.concurrent.locks.ReentrantLock;

// 测试Lock锁
public class TestLock {
    public static void main(String[] args) {
        TestLock2 testLock2 = new TestLock2();

        new Thread(testLock2, "01").start();
        new Thread(testLock2, "02").start();
        new Thread(testLock2, "03").start();
    }
}

class TestLock2 implements Runnable{
    private int ticketNum = 10;

    // 定义Lock锁
    private final ReentrantLock lock = new ReentrantLock();


    @Override
    public void run() {
        while (true) {
            try {
                lock.lock(); // 加锁
                if (ticketNum<=0) {
                    break;
                } else {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()
                            +"抢到了第"+ticketNum--+"张票");
                }
            } finally {
                lock.unlock();
            }

        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读