JUC
文章平均质量分 51
含泪写笔记
这个作者很懒,什么都没留下…
展开
-
三个线程轮流打印1-100
1.利用synchronized实现(不能实现精准唤醒)public class Main{ int num=0; Object o = new Object(); private void print(int targetNum) throws InterruptedException { while(true) { synchronized (o) { //注意while不能写成if -----》会造成虚假唤原创 2021-11-02 16:28:37 · 645 阅读 · 1 评论 -
JUC复习大总结
1.什么是虚假唤醒?(某个线程不应该被唤醒)比如线程A和B同时陷入阻塞,线程C执行notifyAll(),线程A、B都被唤醒,但线程A唤醒执行后的结果应该导致B依旧阻塞,但B没有循环判断,导致也被唤醒!!下面有图解以生产者-消费者模型举例。。class Goods{ public int number=0; //制作方法 public synchronized void made() throws InterruptedException { //判断原创 2021-09-08 21:22:07 · 166 阅读 · 0 评论 -
锁升级、锁消除、锁粗化
一、锁升级为什么要有锁升级机制?Synchronized会涉及到用户态和内核态转换,这对性能有极大的影响。为了提高性能①无锁----->偏向锁------>轻量锁------->重量锁0 01 1 01 0 00 0 10②偏向锁:如果很长时间的情况下只有有一个线程持有这个锁,那么这个线程就会一直持有这个锁③轻量级锁: 假设线程A持有偏向锁,此时线程A有两种情况:A1:线程A正在执行锁里面的内容A2:原创 2021-09-05 15:54:51 · 231 阅读 · 0 评论 -
使用AtomicStampedReference类解决CAS的ABA问题
CAS会导致ABA问题CAS算法实现一个重要的前提是需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差内会导致数据的变化.比如说一个线程one从内存位置V中取出A,线程Two也执行,将A–>B–>A,这时one进行CAS操作发现内存仍是A,然后one操作成功.这会造成很大的隐患,那么我们可以通过以下方法,在发生ABA问题后,不让数据修改public class Study { static AtomicStampedReference atomicStampedR原创 2021-09-03 21:30:25 · 129 阅读 · 0 评论 -
volatile+synchronized 和 原子类 对并发编程特性的保证
以下代码没有保证并发编程下的原子性、有序性、可见性public class Study { public static void main(String[] args) { Person66 person66 = new Person66(); CountDownLatch countDownLatch = new CountDownLatch(10); try{ for (int j=1;j<=10;j++) {原创 2021-09-03 19:37:42 · 99 阅读 · 0 评论 -
线程中断机制
利用interrupt()和isInterrupted()来控制线程的例子1.线程A执行2秒后结束public class Study { public static void main(String[] args) { Thread A = new Thread(()->{ while(true){ if (Thread.currentThread().isInterrupted()){ .原创 2021-09-02 19:19:23 · 51 阅读 · 0 评论 -
三个等待唤醒机制(wait-notify/notifyAll、await-signal、park-unpark)
一、wait-notify/notifyAllpublic class Study { public static void main(String[] args) { Object o = new Object(); new Thread(()->{ synchronized (o){ System.out.println("A即将被阻塞"); try {原创 2021-09-02 18:19:08 · 823 阅读 · 0 评论 -
JUC__Future与CompletableFuture
摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。这一定律揭示了信息技术进步的速度。原创 2021-09-01 20:53:14 · 119 阅读 · 0 评论