并发编程
从入门到慢慢探索
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 · 225 阅读 · 0 评论 -
9.semaphore
semaphore信号量控制同时访问某个特定资源的线程数量,用在流量控制这像是一种锁的机制,acquire()像是获取锁的机制,这里我们叫他许可证,如果获取不到则阻塞,但是一般锁只允许一个线程同时访问,而semaphore可以同时多个(只要有许可证的存在),当业务执行完毕,你需要增加许可证的个数,当然了,你也可以不增加,但是这样的业务需求似乎不存在,release()可新增一个许可证。下面模...原创 2020-02-02 15:40:04 · 97 阅读 · 0 评论 -
8.CountDownLatch和CyclicBarrier
CountDownLatchCountDownLatch类似一个计数的工具,是等待其他线程完成工作以后,相当于加强版的join(),和join()又有所不同,join()是等待一个线程完成,而CountDownLatch只要你在进行countDown操作到0的时候,就会完成初始化,并不代表其他线程关闭了,而join()是等待其他线程执行完了才行,这一点有所不同import java.util....原创 2020-02-02 14:13:41 · 103 阅读 · 0 评论 -
7. Fork-Join分而治之
Fork-Join分而治之分而治之:大问题化为小问题,小问题合并为大问题的解。fork分解,join合取举个例子,吃饭时,一共有40只虾,本来一个人去剥,现在8个人平均去剥虾,一人5只,本来是40个的大任务,化成了8*5的小任务,这就是比较另类一点的分而治之,其次,因为剥虾有快慢之分,可能你剥的很快,你的弟弟还没剥完,这时候你会去帮他剥,但是最后成果还是你弟的,最后每个人完成的时候都是5只虾,...原创 2020-02-02 13:31:15 · 241 阅读 · 0 评论 -
6.wait()和notify()
线程间协作轮询:难以保证及时性,资源开销很大。等待和通知wait()notify()/notifyAll()标准范式等待方获取对象的锁循环里判断是否满足,不满足调用wait()通知方 获取对象的锁改变条件通知所有等在对象的线程代码演示:package tets;import java.util.Scanner;public class waitandn...原创 2020-02-02 12:11:44 · 107 阅读 · 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 · 149 阅读 · 0 评论 -
4.守护线程和synchronized
守护线程守护线程,当我们在新启动一个线程之前,如果将新建的线程对象setDaemon()设为true,那么该线程同时消亡。看下面的例子,在DemoThread01里面,我做了一个类似死循环的打印。在main线程里面,设置为守护线程,启动,结果并不是不停的打印“你好漂亮啊”,当main线程结束,t1也就结束了,值得注意的一点,在finally中的语块也没有执行,以前我们强调,finally中的一...原创 2020-02-01 19:56:57 · 124 阅读 · 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 · 479 阅读 · 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 · 116 阅读 · 0 评论 -
1.基础概念
cpu核心数与线程数的关系核心数:线程数 = 1:1超核心技术 =>1:2一个cpu只能处理一个线程cpu时间片轮转机制指定时间片该谁使用上下文切换–>状态切换–>阻塞和非阻塞之间的切换–>少切换进程和线程进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源线程:cpu调度的最小单位个人理解:cpu分配时间给了进程A,设时间片为B,...原创 2020-02-01 16:25:17 · 92 阅读 · 0 评论
分享