【JUC】基础总结】的更多相关文章

JUC的理解: JUC即java.util .concurrent工具包的简称.从JDK 1.5 开始出现,主要用于处理多线程.高并发问题. 多线程的三大特征解析 原子性.可见性.有序性 1.原子性: 指一个操作或者多个操作,要么同时成功并且执行的过程不会被任何因素打断,要么同时失败. 2.可见性: 指多个线程访问一个资源时,该资源的状态.值信息等对于其他线程都是可见的 3.有序性: 指执行顺序按照代码先后来执行. 用户线程和守护线程 1.用户线程:平时用到的普通线程,自定义线程 2.守护线程:…
经历了Java内存模型.JUC基础之AQS.CAS.Lock.并发工具类.并发容器.阻塞队列.atomic类后,我们开始JUC的最后一部分:线程池.在这个部分你将了解到下面几个部分: 线程池的基础架构 线程池的原理分析 线程池核心类的源码分析 线程池调优 Executor 我们先看线程池的基础架构图: Executor Executor,任务的执行者,线程池框架中几乎所有类都直接或者间接实现Executor接口,它是线程池框架的基础.Executor提供了一种将“任务提交”与“任务执行”分离开来…
目录 一.Volatile 0.基础知识 1. volatile的解释 3.volatile的应用 二.CAS 0.CAS的定义 1.CAS底层原理 2.CAS的缺点 3.ABA问题 三.集合类并发安全 0.问题描述 1.故障现象 2.导致原因 3.解决方法 四.Java锁 0.公平锁.非公平锁 1.可重入锁(递归锁) 2.自旋锁 3.读写锁/互斥锁 五.J.U.C-AQS 0.AQS- Abstract Queued Synchronizer 1.Semaphore信号量 六.阻塞队列 0.B…
JAVA基础 java反射 class对象 三种方式获取class加载时对象 1.class.forName("全类名"):将字节码文件加载进内存,返回class对象 2.类名.class:通过类名的属性class获取 3.对象.getClass():getClass()方法是object中的静态方法 同一个字节码文件(*.class)在运行过程中只会被加载一次 class对象功能 1.获取成员变量 2.获取构造方法 3.获取成员方法 4.获取类名 Field成员变量 一般的get方法…
大家好,我是王有志,欢迎和我聊技术,聊漂泊在外的生活.快来加入我们的Java提桶跑路群:共同富裕的Java人. <AQS的前世,从1990年的论文说起>中我们已经对AQS做了简单的介绍,并学习了先于AQS出现的3种基于排队思想的自旋锁.今天我们深入到AQS的设计中,探究Doug Lea是如何构建JUC框架基础组件的.不过在正式开始前,我们先来回顾上一篇中提到的面试题: 原理相关:AQS是什么?它是怎样实现的? 设计相关:如何使用AQS实现Mutex? 希望今天可以帮你解答上面的问题. Tips…
线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任务来执行. 特点: 线程复用,控制最大并发数,管理线程. 好处: 降低资源消耗.通过重复利用已创建的线程来降低线程创建和销毁造成的消耗. 提升响应速度.当任务到达时,任务不需要等待线程创建就能立即执行 提高线程的可管理性.当线程时稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,…
线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任务来执行. 特点: 线程复用,控制最大并发数,管理线程. 好处: 降低资源消耗.通过重复利用已创建的线程来降低线程创建和销毁造成的消耗. 提升响应速度.当任务到达时,任务不需要等待线程创建就能立即执行 提高线程的可管理性.当线程时稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,…
1.基础知识 java默认的两个线程:Main线程+GC守护线程 java并不能开启线程,需要调用底层用c语言写的本地方法 wait和sleep的区别: wait方法会释放线程锁,并且只能在同步代码块中使用,sleep带锁睡眠,可以在任一地方睡眠 Synchronized锁和lock锁的区别 Synchronized会自动释放锁,lock需手动释放,不然会造成死锁 Synchronized线程会持续等待直到获得锁,而lock锁的tryLock()方法避免了死等 Synchronized(可重入锁…
实现多线程的两种方法 java 实现多线程通过两种方式1.继承Thread类 ,2.实现Runnable接口 class Newthead extends Thread{ public void run(){ System.out.println("thread run"); } } class Newthead implements Runnable{ @Override public void run(){ System.out.println("thread run&q…
阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作支持阻塞的插入和移除方法. 阻塞队列常用于生产者和消费者的场景: 当队列为空的,从队列中获取元素的操作将会阻塞: 当队列为满的,从队列中添加元素的操作将会阻塞: 所谓的阻塞:在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤起. 阻塞队列的用处:不需要我们关心什么时候需要阻塞线程,什么时候需要唤醒线程. BlockingQueue的实现类(比较常用): ArrayBlockingQ…