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