多线程
文章平均质量分 81
SeanSunnn
这个作者很懒,什么都没留下…
展开
-
JAVA多线程:ThreadPoolExecutor
一、简述在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面使得线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。线程池不允许使用 Executors 去创建,而要通过 ThreadPoolExecutor 方式,这一方面是由于 jdk 中 Executor 框架虽然提供了如 newFixedThreadPool()、newSingleThreadExecutor()、newCachedT..转载 2021-05-25 16:13:03 · 499 阅读 · 0 评论 -
JAVA多线程:sleep()、wait() 和 yield()
sleep()方法和wait()方法的区别?sleep方法是Thread的静态方法,wait方法是Object类的普通方法 sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的) wait方法用于线程间通信,而sleep方法用于短暂的暂停线程 sleep针对当前线程,而wait针对被同步代码块加锁的对象 sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待 调用wait方法会暂停线程,当前线程释放对象的原创 2021-05-19 18:16:41 · 181 阅读 · 0 评论 -
JAVA多线程:ThreadLocal
前言说起ThreadLocal即便你没有直接用到过,它也间接的出现在你使用过的框架里,比如Spring的事物管理,Hibernate的Session管理、logback(和log4j)中的MDC功能实现等。而在项目开发中,比如用到的一些分页功能的实现往往也会借助于ThreadLocal。正是因为ThreadLocal的无处不在,所以在面试的时候也经常会被问到它的实现原理、核心API使用以及内存泄露的问题。而且基于这些问题还可以拓展到线程安全方面、JVM内存管理与分析、Hash算法等等知识点。可见转载 2021-05-18 17:34:27 · 1846 阅读 · 2 评论 -
JAVA多线程:ReentrantLock与AQS
转自:https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.html前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深转载 2021-05-14 16:46:05 · 155 阅读 · 0 评论 -
阻塞队列:ArrayBlockingQueue
阻塞队列很好的解决了多线程中数据的安全传输问题,其中最典型的例子就是客园很好的解决“生产者--消费者”问题。下面来看其中一个实现类ArrayBlockingQueue。看到这个名字,就很好理解这个队列肯定是使用数组实现的队列,即使用数组实现的“先进先出”的队列,下面看其具体的实现。一、构造函数/** * Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and default ac原创 2021-04-27 18:10:09 · 276 阅读 · 0 评论 -
优先队列:PriorityQueue、PriorityBlockingQueue
大家都知道队列都遵循(First-In-First-Out)先进先出的规则,但是在特定场景下想改变取出元素的方式就可以使用到优先队列PriorityBlockingQueue。比如:银行VIP、机场VIP优先等。PriorityQueuePriorityQueue类在Java1.5中引入的,它是Java集合框架的一部分。PriorityQueue是基于优先堆的一个无界队列,它是一个Queue默认情况下它 根据自然排序,当然我们也可以定制比较器,自行自定义排序,从而实现自己的优先级逻辑。p.原创 2021-04-27 16:40:13 · 300 阅读 · 1 评论