![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA多线程和高并发
这个栏目里,将会介绍JAVA多线程和高并发的一些知识点。
包括线程,线程池,
Synchronized,Volatile, Lock锁的机制及底层原理,
Concurrent包下常见类的源码分析,包括ReenntrantLock, CountDownLatch, CyclicBarrier等等
SEVEN大姚
疯狂的技术
展开
-
6.ThreadPool源码分析
1.线程池源码大致分析–运行流程1. demo;这个简单的例子创建了一个线程池和一个任务,然后我们循环submit5个任务,我们分析它的源码和执行过程。public class A3ThreadPool { public static void main(String[] args) { Runnable task = new Runnable() { @Override public void run() {原创 2020-05-09 14:11:07 · 192 阅读 · 1 评论 -
4四种引用
强 软 弱 虚 by Seven软:原理:当内存不够的时候,回收软引用指向的对象空间。场景:用作缓存,如大图片。案例:/**设计虚拟机内存只有20M, 堆内存20M设计`m变量-> softReference -> 10M的内存空间`在new 11M的空间,当内存不够的时候,回收软引用对象。**/public class A20SoftReference { // 设置虚拟机参数 -Xms20M -XmxX20M public static void mai原创 2020-05-09 14:10:01 · 173 阅读 · 0 评论 -
3ThreadLocal案例和源码分析
ThreadLocal源码分析及其中的弱引用!by Seven# 使用ThreadLocal的表象当我们new一个ThreadLocal对象的时候,每个线程都可以通过set()和get()来获取值,且获取到的是自己的值;demo:public class A19ThreadLocal { public static void main(String[] args) { // new local对象 ThreadLocal<Integer> loc原创 2020-05-09 14:07:35 · 125 阅读 · 0 评论 -
2_3Condition和CyclicBarrier源码
1. Condition的使用场景:生产者消费者模式生产者向容器中放值,消费者从容器中取值;使用lock,依次只能有一个线程操作容器,当容器满的时候,将当前的生产者线程放入到生产者condition队列中,然后唤醒消费者队列中的线程当容器空的时候,将当前的消费者线程放入到消费者condition队列中,然后唤醒生产者队列中的线程public class A18Inteview3_3<T> { ReentrantLock lock = new ReentrantLock();原创 2020-05-09 14:03:26 · 227 阅读 · 0 评论 -
2_2共享锁的实现
JUC包下的几个重要线程同步工具类如Semaphore, CountDownLatch, ReentrantReadWriteLock都是共享锁的实现,他们重写了AQS的tryAcquireShared(args)方法。1. ReentrantReadWriteLock1.0 综述ReentrantReadWriteLock中读锁和写锁是公用一个state状态. 其中,前16位表示读锁,后16位表示写锁。写锁在lock的时候,是先判断有无读锁(即:前16位是否为0),写锁是否重入,才能确定能否获得锁原创 2020-05-08 21:37:28 · 783 阅读 · 0 评论 -
2_0Concurrent包综述
Concurrent包综述 by SevenConcurrent包下好多很处理多线程高并发的类,包括锁,队列,工具类和原子类等等。这个系列会讲解一些常见类的源码。先分类一下总写一下。后面会详细介绍每一种典形的类。LockAQS: abstractQueuedSynchronizer 抽象队列同步器,并发包的核心类,很多类都含有他的实现,本文的重点;两个常见的子类NonfairSync和FairSync实现了公平锁和非公平锁。实现有共享锁和独占锁两种。ReentrantLock,可重入原创 2020-05-08 21:35:40 · 101 阅读 · 0 评论 -
1.多线程和高并发高频面试题
互联网大厂高频面试题之 线程与高并发模块摘要: 本模块总结了线程与高并发的主要知识点和高频面试题。主要知识点包括:线程,线程池,synchronized和volatile关键字,ReentrantLock锁,Concurrent包下的常用类(CountDownLatch, CyclicBarrier, ReentrantReadWriteLock, Semaphore)及其底层源码AQS同步器,还有Lock锁中的condition。此系列模块还包括线程池的源码解析,Collection和Map包下原创 2020-05-08 21:32:40 · 211 阅读 · 0 评论 -
四种引用
强 软 弱 虚强引用直接`Object obj = new Object()` 那么obj就是一个指向Object对象的强应用;当一个对象没有强应用和其他应用的时候,在GC垃圾清理的时候会被清理掉;软:原理:当内存不够的时候,回收软引用指向的对象空间。场景:用作缓存,如大图片。案例:/**设计虚拟机内存只有20M, 堆内存20M设计`m变量-> softReferen...原创 2020-05-04 18:53:29 · 142 阅读 · 0 评论 -
ThreadLocal案例和源码分析
ThreadLocal源码分析及其中的弱引用!by Seven使用ThreadLocal的表象当我们new一个ThreadLocal对象的时候,每个线程都可以通过set()和get()来获取值,且获取到的是自己的值;demo:public class A19ThreadLocal { public static void main(String[] args) { ...原创 2020-05-04 18:50:53 · 132 阅读 · 0 评论 -
2_1AQS源码分析
AQS源码分析AQS是Concurrent包下的核心类,很多的类包括ReentrantLock, CountDownLatch, CyclicBarrier, ReadWriteLock等包都是通过AQS这个类实现的。这篇文章将会和大家一起看一下AQS的源码分析,从而了解AQS的内部运行情况。AQS的核心内容包括三大块(先了解一下): state状态:0表示锁处于释放状态,1-n表示有线...原创 2020-05-04 18:48:17 · 120 阅读 · 0 评论