JAVA知识回顾-6(线程同步)

JAVA知识回顾-第六天

线程同步的方法:sychronized、lock、reentrantLock等

  • 能保证同一时刻只有一个线程执行该代码块,其他这时访问这个修饰的同步代码块的线程都将被暂时阻塞
  • 当一个Object对象的同步代码块一个线程正在执行时,另一个线程可以对这个Object对象的非同步代码块进行操作
  • 当一个Object对象的一个同步代码块正在一个线程被执行时,另一个线程对这个Object对象的其他同步代码块的访问也会被阻塞

synchronized包括:synchronized方法和synchronized块

  1. synchronized方法:通过在方法声明中加入synchronized关键字来声明同步方法。
  2. synchronized块:通过 synchronized关键字来声明synchronized 块。语法如下:

    synchronized(syncObject) {
    //允许访问控制的代码
    }

  3. java synchronized详解

Lock是一个接口,reentrantLock是Lock接口的一个实现类

下面是一个基本用法

        Lock lock = new ReentrantLock();
        public void fun() {
            lock.lock();//得到锁
            try {
                //同步代码段
            } finally{
                lock.unlock();//释放锁
            }
        }

为了保证锁最终被释放,将执行的代码段放到try中,释放锁放在finally内

syschronized和lock的区别和联系

对象锁和类锁

  • 有一个类叫A,其中有个非静态synchronized修饰的fun()方法,有两个A类的实例,这两个实例能被两个线程同时调用fun(),因为它们是不同的对象,所以说对象锁匙针对对象的。类锁其实是A类中有个静态synchronized修饰的fun()方法,所有对象都共用一个fun(),所以当其他线程调用的时候就要排队,就如同类被锁上了一样。

我的感受

  • 同步代码块对于Android开发用的好少,几乎都没用过╮(╯_╰)╭
  • 同步效率底,安全性高,在需要时我们需要在其中找到平衡点,即是该同步的地方才同步

想说的话

  • 博客坚持写,今后学习了新的东西就在这里记录一下,以便今后回顾,也希望小小笔记能帮助你们
  • 若内容有什么地方不对、不清楚,还望吐槽,希望大家能一起成长
  • 来一句:不做怎么知道呢,试一试吧,做着做着就知道了
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值