解决线程安全方法3:Lock锁

【1】Lock锁引入:

JDK1.5后新增新一代的线程同步方式:Lock锁

与采用synchronized相比,lock可提供多种锁方案,更灵活

 

synchronized是JAVA中的关键字,这个关键字的识别是靠JVM来识别完成的。是虚拟机级别的。

但是Lock锁是API级别的,提供了相应的接口和对应的实现类,这个方式更灵活,表现出来的性能优于之前的方式。

【2】代码演示:

复制代码
package com.msb.test03;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author : liu
 * 日期:10:38:04
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class BuyTicketThread implements Runnable{
    int  ticketNum=10;
    //创建锁
    Lock lock= new ReentrantLock();//多态  接口=实现类 可以使用不同的实现类
    @Override
    public void run() {
        for (int i = 1; i < 100; i++) {
            //打开锁
            lock.lock();
            try {//try catch 异常处理   即使有异常 这个锁也可以得到释放
                if (ticketNum>0){
                    System.out.println("我在"+Thread.currentThread().getName()+"买到了火车票:"+ticketNum--);
                }
            }catch (Exception ex){
                ex.printStackTrace();
            }finally {
                //关闭锁
                lock.unlock();
            }
        }
    }
}
复制代码

 

【3】Lock和synchronized的区别

1.Lock锁是显式锁(手动开启和关闭锁,别忘记关闭锁),synchronized是隐式锁

2.Lock只有代码块锁,synchronized有代码块锁和方法锁

3.使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有更好的扩展性(提供更多的子类)

【4】优先使用顺序:

Lock----同步代码块(已经进入了方法体,分配了相应资源)-----同步方法(在方法体之外)

posted @   爱的加勒比  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示