并发编程(十七):Executor和线程池

1.线程池的设计思路2.如何使用Java中的线程池3.使用线程池的注意点线程是一个重量级的对象,应该尽量避免频繁创建和销毁1.线程池的设计思路一般的池化资源的设计,都是涉及到两个办法:class XXXPool{ // 获取池化资源 XXX acquire() { } // 释放池化资源

并发编程(十六):原子类

1.无锁的原子类实现原理1.1.CAS原理1.2.CAS自旋1.3.Java原子类如何通过CAS实现原子自增2.原子类概述2.1.原子化的基本数据类型2.2.原子化的对象引用类型2.3.原子化数组2.4.原子化对象属性更新器2.5.原子化的累加器1.无锁的原子类实现原理1.1.CAS原理原子类的无锁

并发编程(十五):并发容器

1.同步容器2.并发容器1.1.List1.2.Map1.3.Set1.4.Queue1.同步容器同步容器,指的是通过synchronized关键字来保证原子性,类似如下的包装类都是基于此考量:ArrayList、HashSet 和 HashMap 包装成了线程安全的 List、Set 和 Map。

并发编程(十三):StampedLock

1.StampeLock支持的三种工作模式2.StampeLock的注意事项3.StampeLock的使用模板读多写少的场景中,JDK1.8提供了更快的解决方案,叫做StampeLock,其性能比ReadWriteLock要好1.StampeLock支持的三种工作模式写锁:和ReadWriteLoc

并发编程(十二):ReadWriteLock

1.读写锁:ReadWriteLock1.1.互斥锁与读写锁的重要区别以及适用场景2.读写锁的注意点2.1.关于锁升级和锁降级前面我们介绍了管程和信号量这两个同步原语在 Java 语言中的实现,理论上用这两个同步原语中任何一个都可以解决所有的并发问题。那 Java SDK 并发包里为什么还有很多其他

并发编程(十一):Semaphore

1.信号量模型2.信号量如何使用2.1.限流器Semaphore,现在普遍翻译为“信号量”1.信号量模型信号量模型如下包括如下几个组成部分及操作:一个计数器一个等待队列三个方法init():设置计数器的初始值down():计数器值减一,对应Semaphore中的acquire()方法,如果此时计数器

并发编程(十):Lock和Condition

1.Lock1.1.Lock和synchronized的区别1.1.1.性能上的区别1.1.2.可见性规则1.1.3.可重入锁1.1.4.公平锁与非公平锁1.2.锁的最佳实践2.Condition2.1.同步和异步2.2.Dubbo中同步转异步JDK并发包通过Lock和Condition是来实现管程

并发编程(九):如何写好并发程序

1.封装共享变量2.识别共享变量间的约束条件3.制定并发访问策略1.封装共享变量将共享变量作为对象属性封装在内部,对所有公共方法制定并发访问策略封装共享变量其实指的就是将共享变量封装在内部,只暴露几个公共的方法允许外部访问该共享变量,写代码时在针对这些访问路径进行严格的控制访问。对于不会发生改变的共

并发编程(八):创建多少线程合适

1.为什么使用多线程2.创建多少线程合适2.1.CPU密集型2.2.IO密集型1.为什么使用多线程主要是考量了两个度量指标:延迟:发出请求到响应的时间吞吐量:单位时间内能够处理的请求数量在单核时代,多线程主要就是用来平衡 CPU 和 I/O 设备的。如果程序只有 CPU 计算,而没有 I/O 操作的
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×