随笔分类 - Java 并发笔记
摘要:锁的性能优化 一、优化注意事件 一)减少锁的持有时间 只在必要时进行同步,能明显减少锁的持有时间。 二)锁的细化 缺陷:当系统需要全局锁时,其消耗的资源会比较多。 三)锁的分离 比如读写分离锁 四)锁的粗化 如果对同一个锁不断地进行请求,同步和释放,这些操作本身就会占用大量的系统资源。 锁的粗化可以
阅读全文
摘要:设计模式与并发之生产者-消费者模式 生产者-消费者模式是一个经典的多线程设计模式。它为多线程间的协作提供了良好的解决方案。在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务。生产者和消费者之间则通过共享内
阅读全文
摘要:设计模式与并发之Future模式 核心思想:异步调用。
阅读全文
摘要:设计模式与并发之不变模式 使用不变模式的目的:除去多线程中的同步操作,提高并行程序的性能。 一个类在的内部状态创建后,在整个生命周期内都不会发生改变,该类就是不变类。 JDK中的不变类; java.lang.String java.lang.Boolean java.lang.Byte j
阅读全文
摘要:设计模式与并发之单例模式 简单的单例实现; 缺点:何时产生实例,不好控制。 延迟加载,需要instance才去创建: 缺点:并发条件下加锁,影响性能。 利用静态内部类实现单例,客服以上两种方法的缺陷:
阅读全文
摘要:无锁 一、概述 无锁是处理并发的一种乐观策略,它会假设对资源的访问是没有冲突的。既然没有冲突自然不需要等待,所以所有的线程都可以在不停顿的状态下执行。那遇到冲突怎么办?接下来请看,无锁绝招“CAS”即比较交换术。 二、CAS原理 CAS即Compare and swap.其算法过程是这样的:它有三个
阅读全文
摘要:线程复用:线程池 一、为什么需要线程池 为了避免系统频繁地创建和销毁线程,使用线程池让线程进行复用。(即创建线程变成了从线程池中获取空闲线程,销毁线程变成了把线程放回线程池中。) 二、JDK对线程池的支持:Executor框架 一)Excutor框架简介 注意:任务本身不能抛出异常,不然后续所有执行
阅读全文
摘要:JDK并发包之同步控制 一、重入锁 重入锁使用java.util.concurrent.locks.ReentrantLock来实现。示例代码如下: 对于synchronized来说,如果一个线程在等待锁,那么结果只有两种情况,要么它获得这把锁继续执行,要么继续等待锁。而对于使用重入锁的线程来说则不
阅读全文
摘要:Java内存模型和线程安全 一 、原子性 原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰。 思考:i++是原子操作吗? 二、有序性 Java代码在执行使,并不一点会按照编写程序的语义顺序执行(为了优化性能)。具体不做解释。 三、可见性 可见性是
阅读全文
摘要:Java并行程序基础 一、线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/128050125来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 假设
阅读全文
摘要:Java并发程序设计(一) 基础概念 一、必须知道的几个概念 一)同步(Synchronous)和异步(Asynchronous) 同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。 异步:一旦开始,方法调用就立即返回,调用者就可以继续后续的操作。 二)并发(Concur
阅读全文

浙公网安备 33010602011771号