您当前的位置: 首页 > 

liaowenxiong

暂无认证

  • 2浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

线程同步的学习

liaowenxiong 发布时间:2022-03-09 11:10:34 ,浏览量:2

文章目录
  • 一、同步代码块
  • 二、同步方法
    • 静态同步方法
  • 三、Lock
解决线程安全问题的三种方案:同步代码块、同步方法、使用 Lock

一、同步代码块
synchronized(同步锁对象) { 
需要同步操作的代码
}

注: 1.锁对象可以是任意对象 2.必须保证多个线程使用同一个锁对象

问:为什么随便放个对象,就可以锁住代码块呢?什么原理?

二、同步方法
public synchronized void method() {
可能会产生线程安全问题的代码
}

注:同步方法默认使用当前对象作为锁对象,也就是当前方法的所属实例对象,即 this

静态同步方法
public static synchronized void method() {
可能会产生线程安全问题的代码
}

注:锁对象是当前类的 Class 对象。

三、Lock

Lock 是一个接口,其中有两个抽象方法:

public abstract void lock(); // 获取锁
public abstract void unlock(); // 释放锁

在存在线程安全问题的代码所在类中,声明定义一个成员变量,变量存放接口 Lock 实现类对象的内存地址,如下所示:

Lock lock = new ReentrantLock(); // ReentrantLock 是接口 Lock 的实现类

然后在存在线程安全问题的代码执行前加锁

lock.lock();

代码执行结束后,释放锁:

lock.unlock();

建议:将 lock.unlock() 放在 finally {} 语句块中,无论是否出现异常都会释放锁

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0440s