DoubleAccumulator、LongAccumulator、DoubleAdder、LongAdder是JDK1.8新增的部分,是对AtomicLong等类的改进。比如LongAccumulator与LongAd…
标签:java并发
C++并发编程中static变量的问题
在C++中,static表示的是“静态初始化”,由其声明的变量因此也叫作“静态变量”,他们从完成初始化后就一直存在于程序运行空间中(确切地说位于静态变量区),直至程序退出或销毁。 如果按照变量的作用域来划分,静态变量可以…
Java并发编程札记-(一)基础-02创建线程
本文介绍Java中如何创建线程。 目录: Runnable-定义无返回值的任务 Thread-线程构造器 Callable-定义可以返回值的任务 总结 在Java中,创建新执行线程有四种方法。 继承Thread。 实现R…
Java并发编程札记-(一)基础-07volatile详解
volatile同synchronized一样,是Java中实现线程安全的一种机制。与synchronized相比,特点是使用简单、性能高,但容易出错、使用范围有限。 《Java语言规范(第三版)》中讲到: Java允许…
性能与可伸缩性(第十一章)
性能与可伸缩性 性能包括:服务时间、延迟时间、吞吐率、效率、容量等可伸缩性:当增加计算资源时(例如CPU、内存、存储容量或I/O带宽),程序的吞吐量或者处理能力能相应地增加 当进行性能调优时,其目的通常是用更小的代价完成…
Java并发编程札记-(五)JUC容器-03ConcurrentHashMap
今天来学习ConcurrentHashMap在JDK1.8中的实现。相比JDK1.7,JDK1.8中ConcurrentHashMap的实现有很大的不同。 结构 先来看下JDK1.7与JDK1.8中ConcurrentH…
Java并发编程札记-(三)JUC原子类-05原子方式更新类的指定volatile字段
AtomicReferenceFieldUpdater、AtomicIntegerFieldUpdater和AtomicLongFieldUpdater是基于反射的实用工具,可以提供对关联字段类型的访问。例如Atomic…
Java并发编程札记-(一)基础-03线程的生命周期
本文主要讲解Java中线程的状态。Java中线程的状态和操作系统中线程的状态有所不同。 目录 线程的生命周期 线程的状态 线程的生命周期 此图是根据自己的了解画的,如果有不足或错误欢迎指正。 线程的状态 Java中线程有…
避免活跃性危险(第十章)
避免活跃性危险 在安全性与活跃性之间通常存在着某种制衡,我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致“锁顺序死锁”。同样,我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁…
Java并发编程札记-(四)JUC锁-08CountDownLatch
CountDownLatch是一个通用同步器,用于同步一个或多个任务。在完成一组正在其他线程中执行的任务之前,它允许一个或多个线程一直等待。 可以用一个初始计数值来初始化CountDownLatch对象,任何在这个对象上…
Java并发编程札记-(六)JUC线程池-01概述
前面的例子中总是需要线程时就创建,不需要就销毁它。但频繁创建和销毁线程是很耗资源的,在并发量较高的情况下频繁创建和销毁线程会降低系统的效率。线程池可以通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 参考JDK1.…
Java并发编程札记-(三)JUC原子类-02原子方式更新单个变量
今天学习AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference,这几个类的共同特点是都提供单个变量的原子方式访问和更新功能。下面以AtomicLong为代表,对这些类…