JUC
文章平均质量分 65
我哪会这个啊
用绝对清醒的理智压制不该有的情绪
展开
-
多线程在项目中的应用
1.发短信发短信的场景有很多,比如手机号+验证码登录注册,电影票买完之后会发送取票码,发货之后会有物流信息,支付之后银行发的付款信息,电力系统的电费预警信息等等在这些业务场景中,有一个特征,那就是主业务可以和短信业务割裂,比如手机号+验证码登陆,当我们点击获取验证码的时候,会连接短信业务平台发送短信,但是发短信这个业务受到短信平台的影响,可能会存在一定时间的延时,但是我们不一定非要等短信平台返回之后,再给用户返回,我们可以先返回获取验证码成功的提升样式,将发短信的业务放入到另外一个线程中执行,用户晚一会原创 2022-04-09 00:04:07 · 8778 阅读 · 1 评论 -
ConcurrentHashMap随笔
线程安全集合类概述线程安全集合类可以分为三大类:遗留的线程安全集合如Hashtable,Vector使用Collections装饰的线程安全集合,如:Collections.synchronizedCollectionCollections.synchronizedListCollections.synchronizedMapCollections.synchronizedSetCollections.synchronizedNavigableMapCollections.sy原创 2022-01-22 17:05:12 · 496 阅读 · 0 评论 -
使用AQS实现一个不可重入独占锁
**AQS:**全程是AbstractQueuedSynchronizer,是一个阻塞式锁和相关的同步器工具的框架。其实AQS说白了就是一个可以给我们实现锁的框架,其内部是一个基于FIFO(先进先出)的队列,用state来代表锁的状态,0-没有获得锁,1-获得了锁,其内部定义了内部类ConditionObject特点用state属性来表示资源的状态,(state变量底层是被volatile修饰的),其拥有两种线程模式,独占模式和共享模式,子类需要定义如何维护这个状态,控制如何获取到锁以及如何释放锁,下原创 2022-01-08 22:59:32 · 385 阅读 · 0 评论 -
手动实现一个简易线程池记录
**假设此时读者已经对于线程池的的七大参数配置,核心线程数、最大线程数、阻塞队列拒绝策略已经有了一定的了解,那摩再看看这个代码可能会对你理解线程池的底层实现原理有一定的帮助自定义线程池+工作线程实现class ThreadPool{ // 任务队列 private BlockingQueue<Runnable> taskQueue; // 线程集合 private HashSet<Worker> workers = new HashSet原创 2022-01-02 18:46:48 · 368 阅读 · 0 评论 -
多线程(1)
多线程是提升程序性能非常重要的一种方式使用多线程可以使程序充分利用cpu资源优点:1. 系统资源得到更合理的应用2. 程旭设计更加简洁3. 程序响应更快,运行效率更高缺点:1.需要使用更多的内存空间来支持多线程2.多线程并发访问的情况可能会影响数据的准确性3.数据被多线程共享,可能会出现死锁的情况进程和线程什么是进程?进程就是计算机正在运行的一个独立的应用程序,进程是一个动态的概念,当我们启动某个应用的时候,进程就产生了,当我们关闭该应用的时候,进程就结束了,进程的生命周期是我们在使原创 2021-02-06 10:54:47 · 276 阅读 · 0 评论 -
多线程之2
线程同步Java中允许多线程bing并行访问,同一个时间段内多个线程同时完成各自的操作。多个线程同时操作同一个共享数据时,可能会导致数据不准确的问题使用线程同步可以解决上述问题可以通过synchronized关键字修饰方法实现线程同步,每个Java对象都有一个内置锁,内置锁会保护使用synchronized关键字修饰的方法,要调用该方法就必须先获得锁,否则就处于阻塞状态非线程同步public class Account implements Runnable { private stat原创 2021-02-07 12:39:48 · 120 阅读 · 0 评论 -
多线程之3
线程安全的单例模式单利模式是一种常见的软件设计模式,核心思想就是一个类只有一个实例对象单线程下的单例模式public class SingleTonDemo { private static SingleTonDemo singleTonDemo; private SingleTonDemo(){ System.out.println("创建了SingleTonDemo..."); } public static SingleTonDemo get原创 2021-02-07 17:43:52 · 163 阅读 · 0 评论 -
多线程之4
LockLock是一个接口,用来实现线程同步的,功能与synchronized一样。Lock使用频率最高的实现类是ReentrantLock(重入锁),可以重复上锁在实际工作中,使用如下方式进行开发:实现资源和Runnable接口的解耦合package Thread.Lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Demo02Tes原创 2021-02-08 16:22:54 · 138 阅读 · 0 评论 -
Java并发编程(一)
并发编程可以充分利用计算机的资源,把计算机的性能发挥到最大,可以最大程度节约公司成本,提高效率1.什么是高并发并发vs并行的区别并发concurrency:多线程“同时”操作同一个资源,并不是真正的同时操作,而是交替操作,单核cpu的情况下,资源按照时间段分配给多个线程,张三李四王五使用一口锅炒菜,交替!并行parallelism:是真正的多个线程同时执行,多核cpu,每个线程使用一个cpu资源来执行,张三李四王五使用三口锅炒菜,同时进行并发编程描述的是一种使系统允许多个任务可以在重叠的时间段内执原创 2021-02-09 15:59:47 · 276 阅读 · 1 评论 -
并发编程2+线程池
JUC工具类CountDownLatch:减法计数器可以用来倒计时,当两个线程同时执行时,如果要确保一个线程优先执行,可以使用计数器,当计数器清零的时候,再让另外一个线程执行countDown():计数器减一await():计数器停止,唤醒其他线程new CountDownLatch(100)、countDown()、await()必须配合起来使用,创建对象的时候赋的值是多少,countDown()就必须执行多少次,否则计数器是没有清零的,计数器就不会停止,其他线程也无法唤醒,所以必须保证计数器原创 2021-02-13 21:56:09 · 237 阅读 · 1 评论 -
并发编程3
ForkJoin框架ForkJoin是jdk1.7后发布的多线程并发处理框架,功能上和JUC类似,JUC更多的时候是使用单个类完成操作,ForkJoin使用多个类完成某项工作,处理上比juc更加丰富,实际开发中使用的场景并不是很多,互联网公司真正有高并发需求的时候才会使用,面试的时候会加分它的本质上是对线程池的一种补充,对线程池的一种扩展,基于线程池的,它的核心思想就是将一个大型的任务拆分成很多个小任务,分别执行,最终将小任务的结果进行汇总,生成最终结果本质上就是把一个线程的任务拆分成多个小任务,然原创 2021-02-15 17:05:23 · 87 阅读 · 0 评论 -
synchronized原理
synchronized原理分析原创 2021-11-09 16:23:09 · 84 阅读 · 0 评论