美文网首页
带你搞懂Java多线程(五)

带你搞懂Java多线程(五)

作者: 爺珍爱那颗心 | 来源:发表于2020-01-05 15:39 被阅读0次

带你搞懂Java多线程(一)
带你搞懂Java多线程(二)
带你搞懂Java多线程(三)
带你搞懂Java多线程(四)

synchronized的缺点

  • 获取synchronized关键字的锁不能中断
  • 没有尝试获取锁的机制

Lock接口和核心方法

Lock(显示锁)

Lock是一个接口,只能手动的获取和释放锁,属于Java语法层面的锁,解决了synchronized的缺点
注意 使用lock.lock()后,应将lock.unlock();放在finally中;

public void add(){
  lock.lock();
   try{
    count++;
    }finally{
      lock.unlock();
    }
}

可重入锁ReentrantLock

允许一个线程反复多次的去拿同一把锁。
递归调用的时候,防止一个线程自己把自己锁死。

锁的公平和非公平

  • 公平锁,当多个线程申请同一把锁的时候,先申请的先拿到。
  • 非公平锁,当多个线程申请同一把锁的时候,可能后申请的反而先拿到锁。

哪个更好

性能上非公平锁比公平锁性能更好,因为如果是公平锁,线程拿不到锁会挂起,而线程挂起导致的上下文切换会浪费时间周期。

相关文章

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • 带你搞懂Java多线程(三)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二) 什么是线程间的共享 Java支持多个线程同时访问一个对象...

  • 带你搞懂Java多线程(二)

    带你搞懂Java多线程(一) Java里的线程 Java里的程序天生就是多线程的 启动线程的方式 ①扩展Threa...

  • 带你搞懂Java多线程(一)

    什么是多线程 多线程也叫并发编程,那么在写多线程之前,我们先来了解一下并发编程的基础概念。①CPU核心数和线程数的...

  • 线程、多线程和线程池,看完这些你就能全部搞懂了

    摘要:一文带你搞懂线程、多线程和线程池。 本文分享自华为云社区《一文搞懂线程与线程池[https://bbs.hu...

  • 带你搞懂Java反射

    什么是反射 在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应方法。 反射的缺点 因为反...

  • 带你搞懂Java线程池

    什么是线程池 把线程进行池化,调用的时候直接去池里面去取,而不是每次去重新创建,不用的时候放回线程池,而不是直接销...

  • 带你搞懂Java泛型

    什么是泛型 参数化的类型:将需要传入的属性,进行参数化,实际调用时才指定传入的数据类型。 为什么要用泛型 同样的一...

网友评论

      本文标题:带你搞懂Java多线程(五)

      本文链接:https://www.haomeiwen.com/subject/tsbfactx.html