![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程的艺术
字母999
这个作者很懒,什么都没留下…
展开
-
java并发编程基础
文章目录线程:等待/通知:线程池技术: 线程: 一个程序就是一个进程,一个进程可以有多个线程(每个时刻与CPU是一对一的) 现代操作系统采用时间片分配(应该是按需分配) Thread printThread = new Thread(new Runner(), “PrintThread”); 线程的定义,这里的new Runner()实质是new了一个Runnable子类 等待/通知: notify(),notifyAll() 通知等待在改对象的(所有的)线程 new Thread(new Not原创 2020-10-03 10:31:20 · 64 阅读 · 0 评论 -
java实现原子操作
文章目录 # 原子操作 原子操作是指一个或者多个不可再分割的操作。这些操作的执行顺序不能被打乱,这些步骤也不可以被切割而只执行其中的一部分 # java可以通过锁和循环CAS实现原子操作 一:使用循环CAS实现原子操作:利用CMPXCHG指令,自旋CAS就是循环到CAS操作成功为止 三大问题(应该只是解决思路,还没有实际应用去解决): 1)ABA问题:CAS需要操作值时需要检查值有没有发生变化,但是A->B->A,这样过程变了,但是结果没变,CAS就认为这没有发生变化(实际却是发生了变化的)原创 2020-10-03 10:17:37 · 223 阅读 · 0 评论 -
java中的锁
文章目录volatile(轻量级锁)synchronized(重量级锁)锁的升级和对比 volatile(轻量级锁) 可见性(一个线程修改一个共享变量时,另一个线程能读到这个修改的值),且不会引起线程上下文的切换 内存屏障:限制内存操作的顺序 原子操作: 不可中断的一系列操作(即不可拆分) 缓冲行:缓存中可以分配的最小单位 volatile进行写操作时其对应的汇编代码会多出一行Lock前缀的指令,其作用是: 1:将缓存行的数据写回到系统内存(主内存) 2:其它线程在该系统内存里存储的数据无效(并通过原创 2020-10-03 10:12:35 · 261 阅读 · 0 评论 -
线程上下文的切换
文章目录上下片切换减少上下文切换的开销: 上下片切换 单核CPU也支持多线程执行代码,通过分配时间片来实现多线程,切到下一个任务前会保留上一个任务的状态,方便回来,这也称之为上下片切换(切换所需的开销,以及线程有创建的时间开销就是多线程的弊端) 减少上下文切换的开销: CPU上下文切换分为三类:进程、线程、中断上下文切换 无锁并发编程:多线程处理数据时,可以避免使用锁,比如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据(分好就不竞争了) CAS算法:java的Atomic包使用CAS算原创 2020-10-03 10:03:32 · 108 阅读 · 0 评论