BIO、NIO、AIO 的区别分析 在网络编程里面,涉及IO读写的情况非常的多,常用的就是BIO、NIO、AIO,在不同的场景下采用何种IO既能满足效率又能满足性能,且看下文分析。 2023-03-01 并发编程 BIO - NIO - AIO ThreadLocal遇到线程池出现数据问题和解决方案 ThreadLocal开发中常用,通过ThreadLocal操作数据实现线程之间的隔离,保证线程之间不会因为操作同一数据导致数据安全问题。但是这种隔离是有适用范围的,也就是说在某些特定的情况下还是会出现数据安全问题的。这种特定情况下就是使用到线程池,并且在ThreadLocal使用前后没有做数据清理,就会导致安全问题,下面来看看出现的情况和具体…… 2018-12-02 并发编程 ThreadLocal Java并发编程:如何实现线程间通信的N种场景和对应的实现方式 正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。 1. 文前说明1.1 本文涉及到的知识点 thread.join() object.wait() obje 2018-10-21 并发编程 线程间通信 并发编程 ConcurrentHashMap简单的实现思想理解 关于说ConcurrentHashMap的文章很多,本博客也有转载这样的文章,但是总体觉得都是过于偏重源码的说明。没有很明确的结构图来让我们从整体上理解源码的实现过程。毕竟人都是偏向于懒,博客中源码过于太多,理解起来困难,再加上这种源码分析的篇幅很长,因此能真正看完理解的确不多(个人理解)。所以这篇文章里面将不贴出源码,完全…… 2018-10-18 并发编程 ConcurrentHashMap 死磕Java并发:深入分析synchronized的实现原理 记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以…… 2018-07-14 并发编程 synchronized 线程池ThreadPool浅层面原理分析 线程池是作为程序员必备的技能,合理的使用线程池也是必须的,但是在实际开发过程中,使用线程池的参数都是复制粘贴来的,也不会去考察线程池设计是否符合实际使用场景,是否合理,这篇文章不会深入去说线程池的原理,但是基本的配置参数说明还是有的,希望能对大家开发有用。在多任务下,不采用线程池的方式实现多线程,会降低资源的消耗,降低线程创建和销毁时…… 2018-07-12 并发编程 线程池应用分析 线程池threadPool 死锁的两种体现形式分析和解决方案 死锁在多线程开发过程中比较经常遇到,并且这个问题很隐性,很难排查到问题的所在,即使是查看项目的日志都找不到,很让人头疼。死锁的体现形式主要有两种,分别是简单的死锁,在写代码的时候很容易避免,动态死锁就很麻烦。因为出现死锁的主要原因是两个锁的加锁顺序不同,动态死锁看似是加载顺序都相同,但是实际不同,所以一旦发生,就很难排查。 2018-07-08 并发编程 死锁 Fork-Join内部实现原理分析 在做一个长的任务的时候,需要消耗的时间很长,但是这个时候主流程又要等待这个长任务执行结束后才能执行。如这里这个长任务可能是从数据库中查出报表数据,计算封装出可以写入到报表的数据,主流程在等待往报表中写数据,但是长任务中迟迟计算不出报表数据,因此这里就需要考虑多线程,如果直接创建一个子线程,主线程还是需要等待这个子线程执行结束,这个方案…… 2018-06-30 并发编程 Fork-Join 死磕Java并发:深入分析ThreadLocal原理 ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢?API是这样介绍它的:This class …… 2018-06-24 并发编程 java并发 TrheadLocal原理 JDK7、8对ConcurrentHashMap的实现和总结 ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的…… 2018-06-20 并发编程 ConcurrentHashMap 死磕Java并发:J.U.C之重入锁ReentrantLock ReentrantLock还提供了公平锁也非公平锁的选择,构造方法接受一个可选的公平参数(默认非公平锁),当设置为true时,表示公平锁,否则为非公平锁。公平锁与非公平锁的区别在于公平锁的锁获取是有顺序的。但是公平锁的效率往往没有非公平锁的效率高,在许多线程访问的情况下,公平锁表现出较低的吞吐量…… 2018-06-11 并发编程 ReentrantLock 显示锁 重入锁 AQS实现方式和独占锁、共享锁的原理分析 AQS是AbstractQueuedSynchronizer类的简写,这个是锁的一个设计模式,在Java中很多锁都会用到AQS,如常用的显示锁ReentrantLock、ReentrantReadWriteLock等内部的锁都是继承AQS。AQS的基本的设计模式是模板方法模式,具体锁的获取和释放实现逻辑由类自身来实现,这些方法的组合…… 2018-06-10 并发编程 AQS 独占锁 共享锁