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 }

最新文章

  1. Unity3D移动平台动态读取外部文件全解析
  2. oracle分区表知识
  3. ARM 开发工具 Keil和DS-5的比较。
  4. 1D1D动态规划优化初步
  5. nodejs-helloword案例
  6. POJ 2528 (线段树 离散化) Mayor&#39;s posters
  7. windows 7 共享,未授予用户在此计算机上的请求登录类型
  8. 【CF】259 Div.1 B Little Pony and Harmony Chest
  9. java与javax有什么区别?
  10. JavaScript作用域链详解
  11. skynet newservice API参考
  12. html5学习(一)--canvas画时钟
  13. C++ 中 const和define的区别
  14. JS闭包深入理解(理解篇)
  15. Boot Sector - Hello world
  16. ios 获取当前设备信息、内存
  17. css3 transition 和 animation实现走马灯
  18. Java中的instanceof和isInstance基础讲解
  19. MSF实现RID劫持和MSF实现PsExec执行命令
  20. Struts2返回json数据xml中配置

热门文章

  1. Java基础一篇过(五)Map这篇就够了
  2. 使用DynamicExpresso实现表达式求值
  3. HTML你好!
  4. linux循环定时任务
  5. 自定义springboot - starter 实现日志打印,并支持动态可插拔
  6. Python练习题 008:打印101-200之间的所有素数
  7. QTree1 【题解】
  8. Object.assign()的使用
  9. Django ORM 引发的数据库 N+1 性能问题
  10. 十一长假我肝了这本超硬核PDF,现决定开源!!