
并发编程
深度Java
这个作者很懒,什么都没留下…
展开
-
为什么jdk源码推荐ThreadLocal使用static
ThreadLocal是线程私有变量,本身是解决多线程环境线程安全,可以说单线程实际上没必要使用。既然多线程环境本身不使用static,那么又怎么会线程不安全。所以这个问题本身并不是问题,只是有人没有理解ThreadLocal的真正使用场景,所以有此疑问。看看jdk源码推荐ThreadLocal使用static吧:/** * This class provides thread-l...原创 2020-03-22 01:47:27 · 1527 阅读 · 0 评论 -
JDK源码分析 NIO实现
调用本地native方法package sun.nio.ch;public class IOUtil {...public static native void configureBlocking(FileDescriptor var0, boolean var1) throws IOException;对应jdk文件位置:https://blog.csdn.ne...原创 2020-03-03 23:35:13 · 1759 阅读 · 1 评论 -
互联网大厂技术面试内幕@霞落满天
很多求职者往往并非因为技术不好,而是没有掌握面试的技巧导致不能把握机会,本课程的目的就是本课程先通过比较真实的好简历和不好的简历让大家明白自己的简历有哪些问题,事实上简历是大厂的敲门砖,非常重要,很多人得不到大厂青睐就是问题出在简历上。面试会遇到内推,猎头推荐,那么这里面又会有什么不同和需要注意的地方呢?面试之前肯定要准备准备,怎么样才可以比较好的准备,甚至押宝押准呢?面试都需要做自我介绍,你做的...原创 2020-03-03 21:43:25 · 3248 阅读 · 0 评论 -
Springboot源码分析之内嵌tomcat源码分析
Springboot源码是内嵌tomcat的,这个和完整的tomcat还是不同。内嵌tomcat的源码在tomcat-embed-core等3个jar包里展开tomcat-embed-core的catalina目录再对照下载的apache-tomcat-9.0.31源码打开bin目录,看到很多库文件比如catalina.jar再展开看看类文件和之...原创 2020-02-27 13:50:11 · 2873 阅读 · 0 评论 -
Java字节码研究
关于怎么查看字节码的五种方法参考本人另一篇文章《Java以及IDEA下查看字节码的五种方法》1.String和常连池先上代码:public class TestApp { public static void main(String[] args) { String s1 = "abc"; String s2 = new S...原创 2019-03-05 18:46:45 · 5325 阅读 · 2 评论 -
线上java JVM问题排查
作者:霞落满天第一部分 是我以前公司的一则正式案例:第二部分 是我另一个博客上写的主要是最近发现大家问的比较多就写了此文第一部分 线上真实故障案例下面是一个老系统,代码写的有点问题导致出现这样一个JVM占比过高的问题,正常情况下也就是CPU负载不高的时候21:00左右的,也有30万,但是再多一点30几万就是阈值,就会出现堆积。这个队列一直是增长的快。这个是...原创 2020-01-10 10:42:35 · 10251 阅读 · 1 评论 -
高性能微服务架构设计模式@霞落满天
高性能微服务架构设计模式主讲:霞落满天现在企业开发都是微服务架构,但是有很多问题,比如分布式定义,分布式的微服务怎么拆分,什么时候拆分,怎么做到高性能,中台怎么设计,读写分离模式难道仅仅是MySQL做主从就够了么?分库分表怎么使用,缓存和数据库之间怎么保持一致性,领域模型中的CQRS模式又应该怎么结合自己公司的业务呢?面试过程老是被问题一些系统架构相关的问题,怎么面对新问题可以在面试中短短...原创 2020-01-09 23:18:58 · 3778 阅读 · 1 评论 -
你真的掌握了并发编程volatile synchronized么?
先看代码:import java.util.concurrent.atomic.AtomicInteger;/** * * @author xialuomantian */public class NewTest { static volatile int a = 1; static volatile int b = 1; //static int ...原创 2020-01-05 22:09:16 · 1453 阅读 · 0 评论 -
多线程Atomic和ThreadLocal
public interface CounterI { void addOne(); int getCount();}public class Counter implements CounterI { private static int count = 0; @Override public void addOne() {...原创 2016-04-27 11:43:37 · 5304 阅读 · 0 评论 -
有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue
ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣。先看实例代码:main函数起2个线程模拟生成消费者import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.con...原创 2019-04-15 18:48:07 · 15304 阅读 · 1 评论 -
合理估算线程池线程数量
参考《Java并发编程实战》线程数量计算公式公式:Nthread = Ncpu * Ucpu * (1+ W/C),各字段含义:Nthreads:线程数量Ncpu:CPU的数量,Runtime.getRuntime().availableProcessors()Ucpu:CPU使用率,范围在[0,1]W/C:等待时间与计算时间的比率公式解读:其实就...原创 2019-04-18 15:24:15 · 4783 阅读 · 1 评论 -
Java线程怎样映射到操作系统线程
先说多线程模型,参考经典教材《Operating System Concepts , Silberschatz ,9th edition》中文版是《操作系统概念,第9版》https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html一个线程是CPU利用率的基本单元,包括一个程序计数器,堆栈,一组寄存...原创 2019-04-06 22:07:31 · 6076 阅读 · 2 评论 -
Java一个线程能否结束另一个永不停止的线程
在Java中停止一个线程有三种办法:1.正常结束执行;2.发生异常;3.被其他线程stop(Java官方不建议)参考:https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html为什么Thread.stop弃用?因为它本质上是不安全的。停...原创 2019-04-16 17:29:08 · 5284 阅读 · 0 评论 -
多线程并发编程需要注意虚假唤醒Spurious wakeup
虚假唤醒 Spurious wakeup如果等待线程在没有通知被调用的情况下唤醒,则称为Spurious wakeup。解决方案就是:使用while条件判断,更好的方案是避免使用wait这种低级的API,而是使用高级的并发工具。因为这些高级的并发工具都是经过无数的坑才提炼出来的,如果你对底层缺乏深入的了解比如不知道虚假唤醒那么你没有做这种处理,你的代码可能会出问题。s...原创 2019-04-19 17:48:04 · 2091 阅读 · 1 评论 -
Java多线程的11种创建方式以及纠正网上流传很久的一个谬误
创建线程比较传统的方式是继承Thread类和实现Runnable,也可以用内部类,Lambda表达式,线程池,FutureTask等。经常面试会问到继承Thread类和实现Runnable的区别,然后网上会流传如下这样的说法,这是错误的。流传很久的错误说法:这个说法是举一个火车票售票的例子,大致意思是说实现Runnable接口可以实现多继承,这一点说的是正确的,但是错误的是下面的,那些...原创 2019-04-06 21:22:58 · 5467 阅读 · 4 评论