
Java并发
文章平均质量分 71
盖世胖胖
冠军的心是至死不渝。
展开
-
synchronized
在Java程序运行环境中,JVM需要对两类线程共享的数据进行协调: 1、保存在堆中的对象实例 2、保存在方法区中的Class实例在Java虚拟机中,每个对象和类在逻辑上都和一个监视器相关联。 (1) 对于对象来说,相关联的监视器保护对象的实例变量。 (2) 对于类来说,相关联的监视器保护类的类变量。 (3) 如果一个对象没有实例变量,或者说一个类没有变量,相关联的监视器就什么也不监视。关于原创 2017-02-16 18:14:31 · 491 阅读 · 1 评论 -
CAS和ABA问题
CASCAS全称是CompareAndSwap,是一条CPU的原子指令,其作用是让CPU经过比较后原子地更新某个位置的值,CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了封装汇编的接口。我们知道synchronized是一种悲观锁,它使得其它需要锁的线程挂起,等待持有锁的线程释放锁。而乐观锁却不加锁,它假设没有冲突去完成某项操作,如果冲突失败就重试,直到成功原创 2017-02-17 19:10:20 · 2529 阅读 · 0 评论 -
多线程查询
今天遇到下载资金流水记录的场景。下载的数据源于分页查询,一次5000条。当数据量到达十万级的时候,仅仅通过for循环、每次设置pageNum,查询的等待时间超过了容忍的范围。下面示例展示了采用Callable和Future进行多线程查询并使用CountDownLatch进行多线程同步。// 进行首次查询(略),获取总页数 int totalPage; // 设置计数器,从0开始 final Coun原创 2017-05-31 23:47:20 · 5311 阅读 · 2 评论