
java线程(17)——Lock锁,三个线程抢票加上lock锁后变成三个线程排队买票
发布日期:2021-05-07 02:53:14
浏览次数:15
分类:精选文章
本文共 1939 字,大约阅读时间需要 6 分钟。
1.三个线程同时抢票导致线程不安全
不安全的代码
//测试Lock锁public class TestLock { public static void main(String[] args) { Testlock2 testlock2 = new Testlock2(); new Thread(testlock2).start(); new Thread(testlock2).start(); new Thread(testlock2).start(); }}class Testlock2 implements Runnable { int ticketNums = 10; //定义lock锁 private final ReentrantLock lock = new ReentrantLock(); @Override public void run() { while (true) { if (ticketNums > 0) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(ticketNums--); } else break; } }}
三个线程同时访问票,容易出现线程安全问题
运行结果
2.加上Lock锁后
代码
import java.util.concurrent.locks.ReentrantLock;//测试Lock锁public class TestLock { public static void main(String[] args) { Testlock2 testlock2 = new Testlock2(); new Thread(testlock2).start(); new Thread(testlock2).start(); new Thread(testlock2).start(); }}class Testlock2 implements Runnable{ int ticketNums = 10; //定义lock锁 private final ReentrantLock lock = new ReentrantLock(); @Override public void run() { while (true){ //加锁 lock.lock(); try { if (ticketNums>0){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(ticketNums--); } else break; }finally { //解锁 lock.unlock(); } } }}
运行结果

3.Lock锁与synchronized的对比
- lock是显示锁(手动开启和关闭锁,别忘记关闭锁),synchronized是隐式锁,出了作用域自动释放
- lock只有代码块锁,synchronized有代码块锁和方法锁
- 使用lock锁,JVM将花费较少的时间来调度线程(性能更好)
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月25日 08时31分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Beautiful Soup基础入门
2019-03-05
点击控制盒子移动
2019-03-05
js求阶乘
2019-03-05
小程序图片正确使用方式(防止发布之后不显示)
2019-03-05
C++基础学习笔记08——模板
2019-03-05
Java学习
2019-03-05
Js函数
2019-03-05
Python机器学习算法基础概述
2019-03-05
关于OCR的一些有用的技术博客文章链接
2019-03-05
jquery中用on事件委托的方式绑定事件
2019-03-05
蓝桥杯 2016c/c++A组 方格填数
2019-03-05
L1-039 古风排版 (20分)
2019-03-05
L1-009 N个数求和 (20 分)
2019-03-05
L2-031 深入虎穴 (25 分)
2019-03-05
Unity之PlayerPrefs
2019-03-05
简单的xml读取存储方法(未优化)
2019-03-05
Flower
2019-03-05
Nginx---惊群
2019-03-05
Redis未授权漏洞
2019-03-05