CAS(全称为CompareAndSwap,也有说是CompareAndSet,都差不多)是一条CPU并发原语,它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,判断预期值和更改新值的整个过程是原子的。在JAVA中,CAS的实现全部在sun.misc.Unsafe类中的各个方法,调用 ...
分类:
其他好文 时间:
2020-05-08 16:02:20
阅读次数:
55
二、线程间定制化调用通信 要使多线程之间按顺序调用,实现A->B->C按顺序输出,使用Lock锁实现,通过Lock锁创建三个Condition实例(三把钥匙),通过不同的条件,调用不同钥匙的awite()跟singnal()方法,阻塞或唤醒其他线程 代码实现: package com.jenne.m ...
分类:
编程语言 时间:
2020-05-06 20:03:21
阅读次数:
78
一、什么是阻塞队列 阻塞队列是一个队列,在数据结构中起的作用如上图;当队列是空的,从队列中获取元素的操作将会被阻塞;当队列是满的,从队列中添加元素的操作将会被阻塞 1.为什么需要BlockingQueue: 好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQ ...
分类:
其他好文 时间:
2020-05-06 09:14:13
阅读次数:
71
一、继承Thread类 1 package com.jenne.mydemo; 2 3 public class TestMyThread { 4 public static void main(String[] args) { 5 6 //启动两个线程 7 MyThread my1 = new M ...
分类:
编程语言 时间:
2020-05-06 01:29:31
阅读次数:
56
目录: 1、volatile 关键字与内存可见性 什么是内存可见性:当多个线程操作共享数据时,彼此不可见。 demo:测试线程数据没有及时与主内存数据进行同步 package com.oy; public class TestVolatile { public static void main(St ...
分类:
编程语言 时间:
2020-05-05 20:07:39
阅读次数:
67
1. 前沿 从上一节的CountDownLatch的学习,我们发现其只能使用一次,当state递减为0后,就没有用了,需要重新新建一个计数器。那么我们有没有可以复用的计数器呢?当然,JUC包给我们提供了CyclicBarrier回环屏障来实现计数器的复用。 2. 概念讲解 何为回环:当所有等待线程执 ...
分类:
其他好文 时间:
2020-05-05 11:16:18
阅读次数:
69
JAVA基础 java反射 class对象 三种方式获取class加载时对象 1.class.forName("全类名"):将字节码文件加载进内存,返回class对象 2.类名.class:通过类名的属性class获取 3.对象.getClass():getClass()方法是object中的静态方 ...
分类:
编程语言 时间:
2020-05-04 15:28:36
阅读次数:
58
volatile是什么 ? 是java虚拟机提供的轻量级同步机制,它包含三种特性: 保证可见性: 只要主内存中变量做出修改,其余线程马上会感知到变量的修改。 不保证原子性: 禁止指令重排 JMM概念 ? JMM本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个 ...
分类:
其他好文 时间:
2020-05-02 18:51:25
阅读次数:
46
synchronzied 关键字应该是 Java 并发编程中最重要的内容了,甚至没有之一。在 JDK6 以前,synchronized 关键字还代表着一把重量级锁,因此在 JUC 包里还推出了 Lock 类来替代 synchronized,不过 JDK6 以后的 synchronized 经过优化, ...
分类:
编程语言 时间:
2020-04-29 14:48:07
阅读次数:
91
一:CAS简介CAS:CompareAndSwap(字面意思是比较与交换),JUC包中大量使用到了CAS,比如我们的atomic包下的原子类就是基于CAS来实现。区别于悲观锁synchronized,CAS是乐观锁的一种实现,在某些场合使用它可以提高我们的并发性能。在CAS中,主要是涉及到三个操作数,所期盼的旧值、当前工作内存中的值、要更新的值,仅当所期盼的旧值等于当前值时,才会去更新新值。二:C
分类:
其他好文 时间:
2020-04-23 10:36:56
阅读次数:
61