
java
Deegue
这个作者很懒,什么都没留下…
展开
-
一个故事讲清楚NIO
假设某银行只有10个职员。该银行的业务流程分为以下4个步骤:1) 顾客填申请表(5分钟);2) 职员审核(1分钟);3) 职员叫保安去金库取钱(3分钟);4) 职员打印票据,并将钱和票据返回给顾客(1分钟)。 我们看看银行不同的工作方式对其工作效率到底有何影响。1 BIO方式 每来一个顾客,马上由一位职员来接待处理,并且这个职员需要负责以上4个完整流程。当超过10个顾客时,剩余的顾客需要排队等...转载 2018-05-15 15:43:46 · 13029 阅读 · 0 评论 -
记一次多线程并发问题的排查
背景最近在做离线batch任务执行的中间件,目标将线上所有的批任务都接过来,以便Hive向Spark迁移,对任务整个链路追踪(从开始预执行,到执行引擎选择,到执行日志收集,到执行完成后结果分析 是否倾斜等等)。在做自适应选择执行引擎的时候,定义了一个proposer,里面写了一些规则,来决定使用Spark还是Hive。现象在大量并发提交任务时,会出先proposer不生效的情况,应该用H...原创 2019-08-27 17:06:09 · 960 阅读 · 0 评论 -
LockSupport详解
前言LockSupport是concurrent包中一个工具类,不支持构造,提供了一堆static方法,比如park(),unpark()等。LockSupport中的主要成员及其加载时的初始化:不难发现,他们在初始化的时候都是通过Unsafe去获得他们的内存地址,这里也可以理解为C中的指针。UnsafeUnsafe类可以参考我之前写的文章:深入理解sun.misc.Unsafe原理...原创 2019-05-18 14:32:19 · 17343 阅读 · 3 评论 -
ThreadPoolExecutor详解及线程池优化
前言ThreadPoolExecutor在concurrent包下,是我们最常用的类之一。无论是做大数据的,还是写业务开发,对其透彻的理解以及如何发挥更好的性能,成为了我们在更好的coding道路上必不可少的基础。为什么用线程池?如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。这就是线程池的目的了。线程池为线程生命周期的开销和资...原创 2019-05-17 19:33:43 · 13063 阅读 · 0 评论 -
java 标签跳转用法解析
前言在看jdk源码ThreadPoolExecutor中的addWorker方法的时候(ThreadPoolExecutor详解),发现如下代码:首先这个retry不是java里面的关键字,所以那个retry可以用任何合法的变量名替换,例如hello:等等,下面我们再来看一下这个到底有什么用。用用看首先,下面代码会打印出1~10增加条件后的结果:如果使用retry:结论:br...原创 2019-05-17 16:21:53 · 3040 阅读 · 0 评论 -
CyclicBarrier和CountDownLatch的用法与区别
前言CyclicBarrier和CountDownLatch这两个工具都是在java.util.concurrent包下,并且平时很多场景都会使用到。本文将会对两者进行分析,记录他们的用法和区别。CountDownLatchCountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。CountDownL...原创 2019-05-15 18:02:49 · 10417 阅读 · 3 评论 -
ThreadLocal详解
ThreadLocal是什么ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。内部结构从上面的结构图,我们已经窥见ThreadLocal的核心机制:每个Thread线程内部都有一个Map。Map里面存储线程本地对象(k...原创 2019-05-14 19:35:02 · 2212 阅读 · 0 评论 -
深入理解sun.misc.Unsafe原理
前言Unsafe类在JDK源码中被广泛使用,在Spark使用off-heap memory时也会使用到,该类功能很强大,涉及到类加载机制(深入理解ClassLoader工作机制),其实例一般情况是获取不到的,源码中的设计是采用单例模式,不是系统加载初始化就会抛出SecurityException异常。这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如...原创 2019-05-06 20:01:08 · 34536 阅读 · 17 评论 -
深入理解ClassLoader工作机制
前言ClassLoader类加载器可以说是Java中必学内容之一,无论是想要去研究Concurrent包、Unsafe,还是深入学习Spark等分布式计算框架,都必须对此有一定的理解。笔者在写之前也只了解了皮毛,想通过这篇文章,结合一些书籍和博客,加深对ClassLoader的理解,并分享一下。什么是class文件?xxx.class想必不陌生,JVM不会理解我们写的Java源文件, 我们必...原创 2019-05-05 20:30:50 · 8501 阅读 · 2 评论 -
初探JVM原理与结构
前言这篇文章是JVM的扫盲篇,通俗易懂,对不清楚ClassLoader、Garbage Collection的可以有个大致的了解。HelloWorld在还是小白阶段的时候,我们都会写一个HelloWorld.java,然后执行javac 获得HelloWorld.classpublic class HelloWorld { public static void main(String...原创 2019-05-05 16:26:30 · 3390 阅读 · 3 评论 -
成为Java技术专家需要掌握的知识点
好久没有写博客了,前段时间一直忙着投简历、面试,现在也差不多告一段落了。总结了一下自己的现状就是基础太渣,虽然说下面罗列的Java很多东西平常都用不到,但是如果想要成为与Java/Scala相关岗位的技术专家,就必须对这些基础非常清楚,随便聊到一个点就能谈一个面。所以就去找了很多Java相关比较不错的学习材料,这边汇总了一下,在之后工作之余慢慢学吧。1、Javadoopht...原创 2019-03-06 11:24:57 · 6744 阅读 · 0 评论 -
java 并发: 原子类
相关文章: 1.原子类 ,锁 http://blog.youkuaiyun.com/youyou1543724847/article/details/527355102.多线程相关的3.线程安全的集合 http://blog.youkuaiyun.com/youyou1543724847/article/details/527348764.ThreadLocal http://blog.youkuaiyun.com/y...转载 2018-07-30 15:18:00 · 13272 阅读 · 0 评论 -
G1日志详解
为什么要看GC日志?因为JVM的GC状态能在很大程度上衡量一个Java应用是否健康,在相同条件下能否持续稳定运行。G1和CMS在日志上会有些许的区别,由于平时用G1为主,这边就不提CMS了。G1日志详解本文参考了RedHat Blog的Collecting and reading G1 garbage collector logs,并结合了现实场景和自己的理解来分析。其中的GC日志例子为线...原创 2019-09-26 20:17:09 · 2663 阅读 · 0 评论