hbf548

多看源码多读书

0%

Lock锁

  • 从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当
  • java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象
  • ReentrantLock类实现了Lock ,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是Reentrantl ock,可以显式加锁、释放锁。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    //lock锁
    public class Testlock {
    public static void main(String[] args) {
    Testlock02 testlock02 = new Testlock02();

    new Thread(testlock02).start();
    new Thread(testlock02).start();
    new Thread(testlock02).start();
    }

    }

    class Testlock02 implements Runnable{

    int tickNum = 10;

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


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