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 }

 

posted @ 2020-05-06 03:08  Jenne  阅读(125)  评论(0)    收藏  举报