JUC---03Lock(一)ReentrantLock
1.什么是锁
在以前实现多线程的同步操作时,都是添加synchronized关键字或者synchronized代码块;而锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。
2.核心方法

3.代码实现
1 package com.jenne.jucdemo; 2 3 import java.util.concurrent.locks.Lock; 4 import java.util.concurrent.locks.ReentrantLock; 5 6 /** 7 * 资源类 8 */ 9 class Ticket { 10 private int number = 30; 11 private Lock lock = new ReentrantLock(); 12 13 public void sale() { 14 lock.lock();//加锁 15 16 try { 17 if (number > 0) { 18 System.out.println(Thread.currentThread().getName() + "\t 卖出" + number-- + "号票\t还剩" + number 19 ); 20 } 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } finally { 24 lock.unlock();//解锁 25 } 26 } 27 } 28 29 public class SaleTicket { 30 31 public static void main(String[] args) throws Exception { 32 Ticket ticket = new Ticket(); 33 34 new Thread(() -> { 35 for (int i = 1; i <= 40; i++) ticket.sale(); 36 }, "AA").start(); 37 38 new Thread(() -> { 39 for (int i = 1; i <= 40; i++) ticket.sale(); 40 }, "BB").start(); 41 42 new Thread(() -> { 43 for (int i = 1; i <= 40; i++) ticket.sale(); 44 }, "CC").start(); 45 } 46 }

浙公网安备 33010602011771号