JUC并发编程
文章平均质量分 80
xzystart
这个作者很懒,什么都没留下…
展开
-
并发编程八股文
sleep()方法和wait()方法的区别和共同点?相同点:两者都可以暂停线程的执行,都会让线程进入等待状态不同点:sleep方法没有释放锁,wait方法释放了锁sleep方法属于 Thread 类的静态方法,作用于当前线程;而wait方法是Object类的实例方法,作用于对象本身执行sleep方法后,可以通过超时或interrupt方法唤醒休眠中的线程;执行wait方法后,只能通过notify或notifyAll方法唤醒等待线程线程安全有那些实现思路互斥同步synchroni原创 2022-03-22 11:42:28 · 172 阅读 · 0 评论 -
JUC并发编程之线程池工作原理及主要参数
概述线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。优势1.实现线程的复用,降低频繁创建销毁线程带来的消耗2.提高线程的可管理性,统一对线程进行监控,分配调优等操作3.能够控制任务的最大并发数,提高响应的书时间线程池的主要参数:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,原创 2022-01-24 18:52:42 · 165 阅读 · 0 评论 -
JUC并发编程之生产者消费者两种实现
使用传统JUC锁实现public class ProducerAndConsumerTraditionalDemo {class Data { private int number = 0; // 资源 private Lock lock = new ReentrantLock(); // 可重入锁 private Condition condition = lock.newCondition(); public void increment() throws Exc原创 2022-01-24 18:50:40 · 3800 阅读 · 0 评论 -
JUC并发编程之JUC内置常用工具类
CountDownLatch在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后再进行汇总的场景。在CountDownLatch出现之前一般都使用线程的join()方法来实现这一点,但是join方法不够灵活,不能够满足不同场景的需要,所以JDK开发组提供了CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。工作原理CountDownLatch是通过一个计数器来实现的,计数器的初始值为初始任务的数量。每当完成了一个任务原创 2022-01-24 18:48:49 · 218 阅读 · 0 评论 -
JUC并发编程之阻塞队列概述及相关操作
概述阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。当阻塞队列是空的时候,线程从队列中获取元素的操作将会被阻塞。当阻塞队列是满的时候,线程往队列里添加元素的操作将会被阻塞。阻塞队列提供了四种处理方法:原创 2022-01-24 18:45:57 · 147 阅读 · 0 评论 -
JUC并发编程之Java锁相关概述
公平锁与非公平锁概述公平锁:线程按照申请锁的顺序获取锁(FIFO先入先出)非公平锁:多个线程获取锁的顺序不按照申请锁的顺序,会出现后申请的线程比先申请的线程先获取锁的情况。(抢占锁)高并发情况下,有可能会造成优先级反转或者饥饿现象。ReentrantLockReentrantLock默认就是非公平锁,可以在构造函数中设置为公平锁 // 非公平锁 Lock lock1 = new ReentrantLock(); // 公平锁原创 2022-01-24 18:35:53 · 115 阅读 · 0 评论 -
JUC并发编程之集合类线程安全问题
在并发条件下,由于多数集合没有同步控制所以这些集合具有线程不安全性线程不安全的集合线程不安全用例(ArrayList为例)示例public class MainTest { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>(); for(int i=0; i< 10; i++) {原创 2022-01-24 18:32:40 · 1665 阅读 · 0 评论 -
JUC并发编程之CAS操作及底层实现
概念CAS全称是Compare And Swap,意为比较并交换,是CPU的原子操作CAS是一种抽象思想,并不是一种具体实现.CAS操作有三个参数,待修改值的内存地址,期望值,新值主要思想是判断内存中某个位置的值是否等于期望值,如果等于则使用新值交换旧值,不等于则修改失败CAS非阻塞同步的实现了线程安全CAS操作是原子性的,所以多线程并发使用CAS更新数据时,可以不使用锁。CAS 问题CAS 方式为乐观锁,synchronized 为悲观锁。因此使用 CAS 解决并发问题通常情况下性能更原创 2022-01-24 18:26:21 · 314 阅读 · 0 评论 -
JUC并发编程中Volatile关键字详解与JMM内存模型
Volatile 是什么Volatile是JVM提供的轻量级的同步机制Volatile是一个Java关键字,用来对变量进行修饰Volatile只保证了JMM三大特性的两点1.保证可见性2.不保证原子性3.禁止指令重排(保证有序性)JMM内存模型是什么JMM内存模型本身并不实际存在,而是一个抽象的概念,他描述的是一种规则或规范,通过这组规范定义了实例变量的访问方式.JMM关于同步的规定:线程解锁前,必须把共享变量的值刷新到主内存中线程加锁前,必须从主内存中读取最新值到自己的工原创 2022-01-24 18:16:34 · 190 阅读 · 0 评论