![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
多线程
JH灰色
☠
展开
-
一、并发编程通关面试宝典
文章目录1.先说一下为什么要多线程?2.进程?线程?进程和线程的通信方式?3.进程和线程的区别?4.创建线程的方式?5.线程的几个状态以及状态之间转换的方法?6.线程的几种状态,并指出在哪种状态下可以中断,中断原理?7.sleep会触发哪个状态?什么操作会进入blocking? 什么操作进入waiting? 8.说一下 wait 和 sleep 的区别 ?(后面的await/signal与wait/notify类似)9.Java 怎么去实现共享操作,多线程访问同一数据 ?10.说一下 Future 和 Fu原创 2020-07-14 00:19:54 · 196 阅读 · 0 评论 -
线程池(面试)
文章目录1. 线程池的简介2. 线程池的实现原理2.1 执行流程2.2 execute源码分析流程2.3 新增线程 addWorkder(Runnable firstTask, boolean core)3. 线程池的使用3.1 线程池的创建3.2 Executors工厂的四个线程池3.2.1 newFixedThreadPool(固定线程池)3.2.2 newCachedThreadPool(缓存线程池)3.2.3 newSingleThreadExecutor(单个线程池)3.2.4 newSchedu原创 2020-07-13 12:13:17 · 253 阅读 · 0 评论 -
ThreadLocal 内存泄露问题
文章目录1.内存泄漏2. key=ThreadLocal是强引用3. key=ThreadLocal是弱引用4. 内存泄漏的真实原因5. key要使用弱引用1.内存泄漏内存溢出: Memory overflow 没有足够的内存提供申请者使用.内存泄漏: Memory Leak 程序中已经动态分配的堆内存由于某种原因, 程序未释放或者无法释放, 造成系统内部的浪费, 导致程序运行速度减缓甚至系统崩溃等严重结果. 内存泄漏的堆积终将导致内存溢出2. key=ThreadLocal是强引用假设Threa原创 2020-07-12 21:06:06 · 16730 阅读 · 23 评论 -
ThreadLocal原理及其内部类ThreadLocalMap原理
文章目录1.ThreadLocal简介及案例2. ThreadLocal的内部结构2.1 ThreadLocal的特点1.ThreadLocal简介及案例通常情况下,我们创建的变量可以被任何一个线程访问并修改(线程之间可以通过主内存中转来访问并修改对方工作内存的变量),但是如果我们要实现每一个线程都有自己的专属本地变量该如何解决?。JDK提供ThreadLocal 类主要解决就是让每一个线程绑定自己的值(其他线程通过主内存中转也修改不了对方变量),可以将ThreadLocal 类对象比喻成存放数据的盒原创 2020-07-12 16:20:01 · 1512 阅读 · 0 评论 -
说一下 Future 和 FutureTask,以及他们之前的区别
文章目录1.简介:1.1.线程池解决:Callable1.2. 工厂类Executors解决:Callable2.Future接口:3.FutureTask类:4.Callable/Future/FutureTask的使用(封装了异步获取结果的Future!!!)1.简介:线程的创建方式中有两种,一种是实现Runnable接口,另一种是继承Thread,但是这两种方式都有个缺点,那就是在任务执行完成之后无法获取返回结果,于是就有了Callable接口,Future接口与FutureTask类的配和取得返原创 2020-07-04 13:49:21 · 818 阅读 · 0 评论 -
volatile原理
文章目录1.缓存一致性2. JMM3、volatile可见性原理1、lock前缀指令角度2、内存屏障角度4、volatile有序性原理1、指令重排序2、内存屏障角度5、happens-before规则6、as-if-serial语义1、数据依赖性2、as-if-serial语义7、指令重排序面试题1.缓存一致性1、首先,编译之后Java代码会被编译成字节码.class文件,在运行时会被加载到JVM中,JVM会将.class转换为具体的CPU执行指令,CPU加载这些指令逐条执行。2、计算机的主存和CPU原创 2020-07-03 20:54:21 · 224 阅读 · 0 评论 -
其他锁: StampedLock(戳)、Semaphore(信号量)、CountdownLatch(倒计时)
文章目录1. StampedLock(戳)2. Semaphore(信号量)1.自定义例子2. Semaphore加锁解锁流程3. Semaphore源码3. CountdownLatch(倒计时)1. StampedLock(戳)该类自 JDK 8 加入,是为了进一步优化读性能,它的特点是在使用读锁、写锁时都必须配合【戳】使用加锁解锁:读锁long stamp = lock.readLock();lock.unlockRead(stamp);加锁解锁:写锁long stamp = lock原创 2020-07-02 15:11:10 · 244 阅读 · 0 评论 -
ReentrantReadWriteLock 底层原理
文章目录1.读写锁自定义2. ReentrantReadWriteLock底层原理2.1. t1 w.lock,t2 r.lock2.1.1. 写锁上锁流程(跟ReentrantLock一样,t1 w.lock是独占锁/排它锁)2.1.2. 读锁上锁流程(t2 r.lock共享锁)2.2 t3 r.lock,t4 w.lock2.3 写锁释放(t1 w.unlock)2.3.1 写锁释放流程及读锁加锁流程2.4 t2 r.unlock,t3 r.unlock2.4.1 读锁释放流程与写锁加锁流程3. Ree原创 2020-07-02 12:08:52 · 699 阅读 · 0 评论 -
ReentrantLock 原理
文章目录1. ReentrantLock 原理概述2. ReentrantLock 源码分析2.1. 非公平锁实现原理1. ReentrantLock 原理概述ReentrantLock内部有三个内部类Sync(同步器),NonfairSync(非公平锁),FairSync(公平锁),另外实现了Lock接口。Sync(同步器)继承了AQS类(AbstractQueuedSynchronizer);NonfairSync(非公平锁)继承了 Sync类;FairSync(公平锁)继承了Syn原创 2020-06-30 00:02:33 · 1027 阅读 · 1 评论 -
【并发编程】:锁 !!!!!
文章目录一、1. wait / notify2. wait/notify的使用1、wait(n)与sleep(n)的区别2、使用过程3. 保护性暂停模式4. 生产者消费者模式二、park / unpark三、 线程状态装换四、多把锁五、线程活跃性六、ReentrantLock1. 可重入2. 可打断3. 锁超时4. 条件变量一、1. wait / notify1.WAITING和TIMED_WAITINGWAITING:是获得锁之后,放弃了锁,条件不满足的等待,是永久等待,除非notify唤醒,进原创 2020-05-28 22:44:41 · 175 阅读 · 0 评论 -
【并发编程】线程安全和锁优化
文章目录1. 共享带来的问题2. synchronized 同步代码块3. synchronized 同步方法4. 变量的线程安全分析5. Monitor概念6. Synchronized原理1、轻量级锁2、锁膨胀3、自旋优化4、偏向锁1. 共享带来的问题1、分析问题:下面的代码打印的结果可能为1,0,-1:@Slf4j(topic = "c.Test17")public class ...原创 2020-04-16 20:26:00 · 230 阅读 · 0 评论 -
【并发编程】多线程:并发与并行
文章目录一、进程和线程1. 进程和线程2. 并行和并发3. 应用二、java线程1.创建线程的3种方法2. 查看进程和线程的方法3.线程运行原理4.线程的常用方法1.方法2. sleep & yield3. 线程优先级4. join5. interrupt6. 不推荐的方法7. 主线程和守护线程8. 线程的5种状态9. 线程的6种状态一、进程和线程1. 进程和线程2. 并行和并发...原创 2020-04-16 19:31:24 · 208 阅读 · 0 评论