java并发编程
文章平均质量分 96
$码出未来
~~~
展开
-
redis lua脚本实战秒杀扣减库存
原创不易,转载请注明出处文章目录前言1.redisson介绍2. redis lua脚本编写与执行3.redis减库存lua脚本4.实战4.1 减库存逻辑4.2 压测前言我们都知道redis是高性能高并发系统必不可少的kv中间件,它以高性能,高并发著称,我们常常用它做缓存,将热点数据或者是万年不变的数据缓存到redis中,查询的时候直接查询redis,减轻db的压力,分布式系统中我们也会拿它来做分布式锁,分布式id,幂等来解决一些分布式问题,redis也支持lua脚本,而且能够保证lua脚本执行.原创 2021-04-18 17:40:19 · 4546 阅读 · 2 评论 -
ThreadPoolExecutor源码解析
原创不易,转载请注明出处文章目录前言1.线程池参数解析2.运行原理3.ThreadPoolExecutor实例化4.位运算表示线程池状态与线程数5.提交任务任务6.执行任务7.keepalive清理的是core还是max总结前言1.线程池参数解析2.运行原理3.ThreadPoolExecutor实例化4.位运算表示线程池状态与线程数5.提交任务任务6.执行任务执行原理其实很简单,就是先讲每个worker里面自己的那个firstTask执行完成,接着就不断的从我们配置的那个队列中获.原创 2021-01-18 15:22:07 · 236 阅读 · 0 评论 -
深度解析dubbo线程池技术
1.ThreadPool接口@SPI("fixed")public interface ThreadPool { /** * Thread pool * @param url URL contains thread parameter * @return thread pool */ @Adaptive({Constants.THREADPOOL_KEY}) Executor getExecutor(URL url);}我们可以看原创 2020-05-31 20:15:03 · 5090 阅读 · 1 评论 -
java线程池实现原理
当向线程池投寄一个任务之后,线程池是如何处理这个任务的呢?线程池判断核心线程池(基本线程数,就是创建线程池的第一个参数)里面的线程是否都在执行任务。如果不是,就创建一个新的线程来执行任务。如果核心线程池里面的线程都在执行任务,则进入下一个流程。其实就是判断核心线程池里面的线程数量达到你设置的那个基本线程数量没有,没有就创建一个新的线程来执行你的任务。 线程池判断工作队列(就是创建线程池时候那...原创 2019-08-17 21:12:37 · 148 阅读 · 0 评论 -
java线程池2
一.向线程池提交任务可以使用两个方法向线程池提交任务,execute()和submit()。1.execute()用于提交不需要返回值的任务,所以没法判断任务是否被线程池执行成功。execute方法输入的任务是一个Runnable类的实例。2.submit()用于提交需要返回值的任务,线程池会返回一个future 类型的对象,这个future 对象可以 判断任务是否执行成功,并...原创 2019-08-16 21:40:35 · 125 阅读 · 0 评论 -
java线程池
一.为什么要使用线程池?1.降低资源的消耗。通过重复利用已经创建的线程降低线程创建和销毁造成的消耗。2.提高响应速度。当任务到达时,任务可以不用等到线程创建就能执行(前提是空闲情况下)3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控。二.线程池的创建可以通过new ThreadPoolEx...原创 2019-08-12 21:53:55 · 105 阅读 · 0 评论 -
volatile的定义与原理
一.定义java语言规范第三版对volatile的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。java语言提供了volatile,在某些情况下比锁更加方便,如果一个字段被声明称volatile,java线程内存模型能够确保所有线程看到这个变量的值是一致的。二. volatile如何保证可见性我们在...原创 2019-08-20 22:10:33 · 381 阅读 · 0 评论 -
java并发工具类之Semaphore
一.介绍Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。通俗的理解就是,Semaphore能够控制并发线程的数量,可以把它比作控制流量的红绿灯,比如说马路要限制流量,只允许同时一百辆汽车在这条路上行驶,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,而后面的车则会看到红灯,不能驶入马路,但是如果前一百辆车中有5...原创 2019-08-10 21:56:20 · 217 阅读 · 0 评论 -
java并发工具类之CountDownLatch
一.介绍CountDownLatch允许一个或者多个等待其他线程完成操作。CountDownLatch可以理解为一个计数器,比如说我有5个下载任务需要5个线程来同时进行下载,然后全部下载完成进行提示,这时候我们就需要知道这5个线程的状态了,有一种比较好理解的方案就是 设置一个变量作为计数器,来统计下载完成的数量,每当有线程下载完成的时候就对这个数量加1,然后我们有个主线程来不停的访问判断这个统...原创 2019-08-07 21:31:16 · 277 阅读 · 0 评论 -
java并发工具之Exchanger
一.介绍Exchanger(交换者),是用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。二...原创 2019-08-09 23:24:45 · 256 阅读 · 0 评论 -
Amdahl定律
一.介绍Amdahl(Amdahl)定律是计算机科学中非常重要的定律,他定义了串行系统并行化后加速比的计算公式和理论上限。加速比定义: 加速比= 优化前系统消耗/ 优化后系统消耗所谓的加速比,就是优化前的消耗与优化后的消耗的比值。优化比越高,就说明优化效果越明显。Amdahl定律给出了加速比与系统并行度和处理器数量的关系。设加速比为speedup,系统内必须串行化的程序比重为F,C...原创 2019-08-14 12:19:50 · 3167 阅读 · 0 评论 -
java并发工具类之CyclicBarrier
一.介绍CyclicBarrier的字面意思是可以循环使用的(Cyclic)的屏障(Barrier),它主要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。图01 :01与02 线程先到达了Barries,被阻塞,等待03线程的到来。图02 :03 线程到达,Barries开门,02线程获得...原创 2019-08-05 21:45:15 · 212 阅读 · 0 评论 -
Callable,FutureTask,Future详解
目录一.介绍1.Callable2.Future3.FutureTask二.简单使用1.使用Thread类实现2.使用线程池实现三.源码详解1.Callable接口2.Future接口3. FutureTask一.介绍1.Callable<T>Callable<T>是一个接口,有一个唯一的抽象方法call方法...原创 2019-07-28 13:40:35 · 469 阅读 · 0 评论 -
ThreadLocal原理解析
当我们在使用多个线程访问一个共享变量的时候特别容易带来数据安全问题,尤其是我们在对一个共享变量写操作的时候,我们通常的解决方案是加锁,使对该共享变量的操作串行化,那么有没有一种方式可以做到,创建一个变量,每个线程对其访问的时候访问的是自己线程变量呢?使用ThreadLocal就可以实现。ThreadLocal它提供了一个本地线程变量,通俗的讲就是你创建了一个ThreadLocal变量,线程a在给...原创 2019-07-17 22:20:21 · 1214 阅读 · 1 评论 -
InheritableThreadLocal原理解析
InheritableThreadLocal使用在该《ThreadLocal原理解析》篇文章中ThreadLocal有一个问题就是子线程不能继承父线程的变量。那么本篇所分析的InheritableThreadLocal类就是为了解决这个问题诞生的。ThreadLocal问题演示 public static ThreadLocal<String> threadLocal...原创 2019-07-18 20:21:27 · 843 阅读 · 0 评论