
juc
Luck_ZZ
这个作者很懒,什么都没留下…
展开
-
Java的volatile作用
volatile三大特性volatile有三大特性:保证可见性、不保证原子性、禁止指令重排序1.保证可见性各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存,进行操作写回到主内存中这就可能一个线程A修改了共享变量X的值但还没写回到主内存时,另外一个线程B对主内存中同一个共享变量X进行操作,但此时A线程工作内存中共享变量X对B来说是不可见的volatile保证可...原创 2019-11-16 11:07:01 · 1517 阅读 · 0 评论 -
Java中的CAS的使用及ABA问题的解决
一、CASCAS的全称是Compare-And-Swap,它是一条CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类中各个方法,调用Unsafe类中的CAS方法,JVM会帮我们实现CAS汇编指令,这个一种完全依赖于硬件的功能,通过它实现了原子操作。CAS是一条CPU原子指...原创 2019-09-17 15:00:06 · 684 阅读 · 0 评论 -
ArrayList线程不安全及解决办法
1、ArrayList线程不安全代码:创建30个线程,向ArrayList集合添加元素public class ContainerNotSafeTest { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); f...原创 2019-09-17 18:10:08 · 1880 阅读 · 1 评论 -
Java公平锁/非公平锁、可重入锁(递归锁)、自旋锁、独占锁/共享锁/互斥锁
一、公平锁和非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程,优先获取锁,在高并发的情况下,有可能造成优先级反转或者饥饿现象公平/非公平锁,并发包中ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或非公平锁,默认非公平锁公平锁:在并发环境...原创 2019-09-19 15:26:55 · 400 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、Semaphore的使用
一、CountDownLatchCountDownLatch(倒计时计数器、闭锁),让一些线程阻塞直到另一些线程完成一些操作才被唤醒CountDownLatch主要有两个方法:当一个或多个线程调用await()方法时,调用线程会被阻塞;其他线程调用countDown()方法会将计数器减一,调用countDown()方法不会被阻塞当计数器的值为0时,调用await()方法被阻塞的线程会被...原创 2019-09-19 20:20:09 · 245 阅读 · 0 评论 -
Java阻塞队列BlockingQueue
一、阻塞队列阻塞队列,首先是一个队列。当阻塞队列是空时,从队列中获取元素的操作将会被阻塞;当阻塞队列是满时,往队列里添加元素的操作将会被阻塞在多线程领域,所谓阻塞,在某些情况下挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒,我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程二、BlockingQueue核心方法方法类型 抛出异常 特殊值 阻塞...原创 2019-09-20 09:34:21 · 203 阅读 · 0 评论 -
Java三种方式(synchronized、Lock、BlockingQueue)解决生产者消费者问题
一、synchronized使用synchronized互斥访问生产方法(produce)和消费方法(consume)如果仓库满,就调用wait()方法阻塞生产者线程;如果仓库空,就调用wait()方法阻塞消费者线程调用notifyAll()方法唤醒线程interface Storage{ public void produce() throws InterruptedE...原创 2019-09-20 10:10:19 · 1143 阅读 · 0 评论 -
Java创建线程池三种方式及自定义线程池
一、线程池线程池的工作主要是控制运行的线程数量,把大于线程池线程数量的线程放到队列中,等到线程池有空闲线程,再从队列取出任务来执行线程池优点:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗 提高响应速度,当任务到达时,任务可以不需要的等到线程创建就能立即执行 提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗资源,还会降低系统的稳定性,使用线程池可...原创 2019-09-20 15:20:07 · 4834 阅读 · 1 评论