![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
从入门到慢慢探索
yan_xiao_liu
就是干啊!!!!!!!!!!!
展开
-
10.CAS基本概念
CAS(Compare and Swap) 原理:指令级别去保证这是一个原子操作,利用了现代处理器都支持的CAS的指令循环这个指令(自旋) CAS包含三个运算符: 一个内存地址v 一个期望值A 一个新值B 如果地址v对应的值为A,则将值换成B,如果不是A,则不进行任何操作,直到操作成功。 很多人不理解上面的话,我来写一段代码演示一下CAS的操作 private AtomicInteger at...原创 2020-02-02 21:34:00 · 170 阅读 · 0 评论 -
9.semaphore
semaphore信号量 控制同时访问某个特定资源的线程数量,用在流量控制 这像是一种锁的机制,acquire()像是获取锁的机制,这里我们叫他许可证,如果获取不到则阻塞,但是一般锁只允许一个线程同时访问,而semaphore可以同时多个(只要有许可证的存在),当业务执行完毕,你需要增加许可证的个数,当然了,你也可以不增加,但是这样的业务需求似乎不存在,release()可新增一个许可证。 下面模...原创 2020-02-02 15:40:04 · 71 阅读 · 0 评论 -
8.CountDownLatch和CyclicBarrier
CountDownLatch CountDownLatch类似一个计数的工具,是等待其他线程完成工作以后,相当于加强版的join(),和join()又有所不同,join()是等待一个线程完成,而CountDownLatch只要你在进行countDown操作到0的时候,就会完成初始化,并不代表其他线程关闭了,而join()是等待其他线程执行完了才行,这一点有所不同 import java.util....原创 2020-02-02 14:13:41 · 79 阅读 · 0 评论 -
7. Fork-Join分而治之
Fork-Join分而治之 分而治之:大问题化为小问题,小问题合并为大问题的解。fork分解,join合取 举个例子,吃饭时,一共有40只虾,本来一个人去剥,现在8个人平均去剥虾,一人5只,本来是40个的大任务,化成了8*5的小任务,这就是比较另类一点的分而治之,其次,因为剥虾有快慢之分,可能你剥的很快,你的弟弟还没剥完,这时候你会去帮他剥,但是最后成果还是你弟的,最后每个人完成的时候都是5只虾,...原创 2020-02-02 13:31:15 · 194 阅读 · 0 评论 -
6.wait()和notify()
线程间协作 轮询:难以保证及时性,资源开销很大。 等待和通知 wait() notify()/notifyAll() 标准范式 等待方 获取对象的锁 循环里判断是否满足,不满足调用wait() 通知方 获取对象的锁 改变条件 通知所有等在对象的线程 代码演示: package tets; import java.util.Scanner; public class waitandn...原创 2020-02-02 12:11:44 · 80 阅读 · 0 评论 -
5.volatile和ThreadLocal
volatile关键字 读操作时,获取到的都是最新的值 代码演示 public class testThread { private static class VolatileVar implements Runnable { private volatile int a = 0; @Override public void run()...原创 2020-02-01 20:38:01 · 112 阅读 · 0 评论 -
4.守护线程和synchronized
守护线程 守护线程,当我们在新启动一个线程之前,如果将新建的线程对象setDaemon()设为true,那么该线程同时消亡。 看下面的例子,在DemoThread01里面,我做了一个类似死循环的打印。在main线程里面,设置为守护线程,启动,结果并不是不停的打印“你好漂亮啊”,当main线程结束,t1也就结束了,值得注意的一点,在finally中的语块也没有执行,以前我们强调,finally中的一...原创 2020-02-01 19:56:57 · 102 阅读 · 0 评论 -
3.线程之间的状态转换,interrupt中断标志位等
线程状态 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZUZihrEU-1580545388362)(C:\Users\xiao-liu\Desktop\图片\未命名文件 (2)].png) 解读 1.start() ≠ run() /** * 比较start()与run()的不同 */ public class testThread { public...原创 2020-02-01 16:24:22 · 427 阅读 · 0 评论 -
2.创建线程的方式
Thread类本身是一个实现了Runnable接口的类 大致上看下构造方法 方式一:继承Thread类重写Run()方法 方式二:实现Runable接口重写Run()方法 方式三:实现Callable接口重写call()方法 import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo...原创 2020-02-01 16:24:53 · 86 阅读 · 0 评论 -
1.基础概念
cpu核心数与线程数的关系 核心数:线程数 = 1:1 超核心技术 =>1:2 一个cpu只能处理一个线程 cpu时间片轮转机制 指定时间片该谁使用 上下文切换–>状态切换–>阻塞和非阻塞之间的切换–>少切换 进程和线程 进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源 线程:cpu调度的最小单位 个人理解:cpu分配时间给了进程A,设时间片为B,...原创 2020-02-01 16:25:17 · 64 阅读 · 0 评论