Java多线程(五)-线程同步(Lock锁)
2021/10/2 20:40:34
本文主要是介绍Java多线程(五)-线程同步(Lock锁),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
六.线程同步(并发)
Lock锁:
通过显式定义锁实现同步。
java.util.concurrent,locks.lock接口是控制多个线程对共享资源进行访问的工具。锁可以对共享资源的独占访问,每次只能有一个线程对lock对象加索,线程开始访问共享资源前先获得lock对象。
ReentrantLock类实现了Lock,拥有于synchronized相同的并发性和内存语义,比较常用。
class A{ private final ReentrantLock lock = new ReentrantLock(); public void m() { try { lock.lock(); //保证线程安全的代码 }finally { lock.unlock(); } } }
点击查看案例
public class Lock { public static void main(String[] args) { BuyTickett buyTicket = new BuyTickett(); new Thread(buyTicket,"a").start(); new Thread(buyTicket,"b").start(); new Thread(buyTicket,"c").start(); } } class BuyTickett implements Runnable{ private int ticketNum = 10; boolean flag = true; private final ReentrantLock lock = new ReentrantLock(); @Override public void run() { while (flag){ try { lock.lock(); try { buy(); } catch (InterruptedException e) { e.printStackTrace(); } }finally { lock.unlock(); } } } private void buy() throws InterruptedException { if (ticketNum <= 0){ flag = false; return; } Thread.sleep(100); System.out.println(Thread.currentThread().getName()+"获得了第"+ticketNum--+"张票"); } }
运行结果
b获得了第10张票 b获得了第9张票 c获得了第8张票 c获得了第7张票 c获得了第6张票 c获得了第5张票 c获得了第4张票 c获得了第3张票 a获得了第2张票 a获得了第1张票
Lock锁与synchronized对比:
- lock是显式锁,需手动开启关闭,synchronized隐式锁,出作用域自动关闭
- Lock锁性能更好
- (优先级)使用顺序:Lock>同步块>同步方法
这篇关于Java多线程(五)-线程同步(Lock锁)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器