并发编程(十九):CompletableFuture

1.CompletableFuture的核心优势2.CompletabelFuture的使用2.1.对象的创建2.2.CompletionStage接口2.2.1.描述串行关系2.2.2. 描述 AND 汇聚关系2.2.3. 描述 OR 汇聚关系2.2.4. 异常处理Java 在 1.8 版本提供了

并发编程(十八):Future

1.ThreadPoolExecutor 获取执行结果1.1.Submit2.FutureTask当使用线程池时,我们该如何获取结果呢?1.ThreadPoolExecutor 获取执行结果ThreadPoolExecutor 提供的 3 个 submit() 方法和 1 个 FutureTask

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

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

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

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

并发编程(十二):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

×