
多线程
zyc920716
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring @Scheduled线程模型探究 - 改为多线程
通过上一节分析源码我们知道,执行任务的是TaskScheduler的实现类,在ScheduledAnnotationBeanPostProcessor#finishRegistration()方法中会设置TaskScheduler。首先如果注册器ScheduledTaskRegistrar中的scheduler成员为空才会从Spring上下文中加载我们只需要为ScheduledTaskReg...原创 2020-03-14 20:19:48 · 499 阅读 · 1 评论 -
Netty -从ServerBootstrap入手分析内部实现
public class DiscardServer { private int port; public DiscardServer(int port) { this.port = port; } public void run() throws Exception{ EventLoopGroup bossGroup = new...原创 2020-03-09 00:41:03 · 248 阅读 · 0 评论 -
死锁分析
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁需要满足4个条件: 1. 互斥条件:一个资源每次只能被一个进程使用。 2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3. 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 4. 循环等待条件:若干进程之间形成一种头尾相接原创 2017-09-28 14:28:13 · 394 阅读 · 0 评论 -
深入源码剖析Thread.join实现
java.lang.Thread类提供一个静态方法join可以阻塞主线程(调用join方法的线程),直到当前线程执行完。用法如下: join会保证t2在t1线程执行完退出之后再执行,程序执行结果总是如下 定义实现该方法掉用了join(0)方法, 我们跟进查看具体实现。注意这里是一个静态方法加了同步锁,锁的是this,也就是当前类实例。我们知道在线程获取了锁以后再执行wait方法,会让线程释放掉锁原创 2017-10-27 23:21:44 · 605 阅读 · 2 评论 -
如何聪明地使用锁
竞争锁是造成多线程应用程序性能瓶颈的主要原因 区分竞争锁和非竞争锁对性能的影响非常重要。如果一个锁自始至终只被一个线程使用,那么 JVM 有能力优化它带来的绝大部分损耗。如果一个锁被多个线程使用过,但是在任意时刻,都只有一个线程尝试获取锁,那么它的开销要大一些。我们将以上两种锁称为非竞争锁。而对性能影响最严重的情况出现在多个线程同时尝试获取锁时。这种情况是 JVM 无法优化的,而且通常会发生从用户转载 2017-11-10 16:07:12 · 1860 阅读 · 0 评论 -
控制三个线程交替打印ABC
package me.zyc.thread.test;import java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject;import java.util.concurrent.locks.ReentrantLock;public class LoopRunByOrder { private s原创 2018-01-10 17:38:59 · 488 阅读 · 0 评论 -
JDK源码走读之ReentrantLock
ReentrantLock的功能几乎等同于Synchronized,在分析源码之前,我们首先来明确一下ReentrantLock要实现的功能,这样才能做到有的放矢。控制线程执行顺序。当线程获取锁进入Synchronized代码块(获取监视器),其余线程必须等待该线程执行完毕,才能继续执行该代码块。提供线程通信功能。Synchronized关键字支持在其代码块中使用await、notify、原创 2017-11-11 17:30:26 · 414 阅读 · 0 评论