随笔 - 322  文章 - 0  评论 - 4  阅读 - 77146

Java 多线程----- 解决线程安全问题的 方式三:Lock锁 --------jdk 5.0 新增

复制代码
 1 package bytezero.deadlock;
 2 
 3 import java.util.concurrent.locks.ReentrantLock;
 4 
 5 /**
 6  * 解决线程安全问题的方式三:Lock锁 --------jdk 5.0 新增
 7  *
 8  *  1.面试题:synchronized 与 lock的异同?
 9  *   同: 二者都可以解决线程安全问题
10  *
11  *   不同:synchronized 机制在执行完相应的同步代码以后,自动的释放同步监视器
12  *        lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())
13  *
14  *     2.如何解决线程安全问题?几种方式
15  *     3种
16  *
17  *
18  * @author Bytezero1·zhenglei!    Email:420498246@qq.com
19  * create  2021-10-18 11:03
20  */
21 class Window implements Runnable{
22     private int ticket = 100;
23 
24     //1.实例化 ReentrantLock
25     private ReentrantLock lock = new ReentrantLock();
26 
27 
28     @Override
29     public void run() {
30         while(true){
31             try {
32 
33                 //调用lock锁定方法
34                 lock.lock();
35                 if(ticket > 0){
36                     try {
37                         Thread.sleep(100);
38                     } catch (InterruptedException e) {
39                         e.printStackTrace();
40                     }
41 
42                     System.out.println(Thread.currentThread().getName() +": 售票,票号为:" +ticket);
43                     ticket--;
44                 }else{
45                     break;
46                 }
47             }finally {
48                 //3.调用解锁的方法
49                 lock.unlock();
50             }
51         }
52     }
53 }
54 public class LockTest {
55     public static void main(String[] args) {
56         Window w1;
57         w1 = new Window();
58 
59         Thread t1 = new Thread(w1);
60         Thread t2 = new Thread(w1);
61         Thread t3 = new Thread(w1);
62 
63         t1.setName("窗口一");
64         t2.setName("窗口二");
65         t3.setName("窗口三");
66 
67         t1.start();
68         t2.start();
69         t3.start();
70 
71     }
72 }
复制代码

 

 ................

posted on   Bytezero!  阅读(40)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示