随笔分类 -  多线程与高并发

摘要:线程池工具类 import java.util.concurrent.*; /** * @author D-L * @version 1.0.0 * @ClassName ThreadPoolManager.java * @Description 线程池工具类(单例) * @createTime 2 阅读全文
posted @ 2021-06-03 15:18 AmourLee 阅读(862) 评论(0) 推荐(0) 编辑
摘要:import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; impor 阅读全文
posted @ 2021-06-03 11:53 AmourLee 阅读(272) 评论(0) 推荐(0) 编辑
摘要:解读源码本来就是一件极其枯燥乏味的事情 希望你坚持住 过了这道坎 你会看到不一样的风景; 在解读源码之前我们来讨论一下源码解读的技巧: 跑不起来的源码不读 解决问题就好-目的性 一条线索到底 无关细节略过 1、跑不起来的源码不读 因为大部分源码都会用到好多的设计模式,这就促使如果源码跑不起来,单纯的 阅读全文
posted @ 2020-07-28 01:27 AmourLee 阅读(255) 评论(0) 推荐(0) 编辑
摘要:可重入概念是不同的方法上加的是同一个锁,在一个方法中可以调用另一个方法,不会出现死锁的问题(意思就是我锁了一次之后还可以对同样这把锁再锁一次); 一、回顾一下synchronized锁可重入性: 记得在之前讲synchronized的时候讲过,synchronized就是可重入的。假设synchro 阅读全文
posted @ 2020-07-23 15:56 AmourLee 阅读(165) 评论(0) 推荐(0) 编辑
摘要:一、为什么要使用Atomic类? 看一下下面这个小程序,模拟计数,创建10个线程,共同访问这个int count = 0 ;每个线程给count往上加10000,这个时候你需要加锁,如果不加锁会出现线程安全问题,但是使用AtomicInteger之后就不用再做加锁的操作了,因为AtomicInteg 阅读全文
posted @ 2020-07-22 11:55 AmourLee 阅读(252) 评论(0) 推荐(0) 编辑
摘要:CAS操作号称无锁优化,也叫作自旋;对于一些常见的操作需要加锁,然后jdk就提供了一些以Atomic开头的类,这些类内部自动带了锁,当然这里的锁并非是用synchronized来实现的,而是通过CAS操作来实现的; 一、下面是 AtomicInteger 的使用: package com.desig 阅读全文
posted @ 2020-07-21 10:37 AmourLee 阅读(760) 评论(0) 推荐(0) 编辑
摘要:首先volatile有两大功能: 保证线程可见性 禁止指令重排序 1、保证线程可见性 首先我们来看这样一个程序,其中不加volatile关键字运行的结果截然不同,加上volatile程序能够正常结束,不加则程序进入死循环; package com.designmodal.design.juc01; 阅读全文
posted @ 2020-07-20 01:46 AmourLee 阅读(166) 评论(0) 推荐(0) 编辑
摘要:一、为什么要使用synchronized关键字? 1、使用synchronized关键字的原因:在并发编程问题中存在着共享数据,在多线程操作共享数据时,要保证同一时刻只有一个线程在执行某个方法或某个代码块; synchronized既保证了原子性,又保证了可见性,所以可以使用synchronized 阅读全文
posted @ 2020-07-17 17:05 AmourLee 阅读(1959) 评论(0) 推荐(0) 编辑
摘要:常见的线程状态有六种: 1.新建状态(new):当我们new 了一个线程,但是没有调用start()方法; 2.Runnable状态:此状态包含两个状态: 就绪状态(Ready):当线程调用了start()方法时,线程就进入了就绪状态; 运行状态(Running):当该线程被系统的调度器选中就会进入 阅读全文
posted @ 2020-07-17 00:11 AmourLee 阅读(324) 评论(0) 推荐(0) 编辑
摘要:既然学习多线程,那你就要知道线程是如何创建的,线程又是如何启动的,下面就看一下,线程的创建和启动; 1、创建线程的方法一般有三种: 继承Thread类 实现Runnable接口 实现Callable接口 2、启动线程的方法一般有四种: new T01().start(); new Thread(ne 阅读全文
posted @ 2020-07-16 16:42 AmourLee 阅读(145) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示