![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程
文章平均质量分 79
唐影若凡
热爱生活。
展开
-
Java并发系列7-Disruptor无锁缓存框架
1、从生产者消费者说起在传统的生产者消费者模型中,通常是采用BlockingQueue实现。其中生产者线程负责提交需求,消费者线程负责处理任务,二者之间通过共享内存缓冲区进行通信。由于内存缓冲区的存在,允许生产者和消费者之间速度的差异,确保系统正常运行。下图展示一个简单的生产者消费者模型,生产者从文件中读取数据,将数据内容写入到阻塞队列中,消费者从队列的另一边获取数据,进行计算并将结果输出。其中Ma原创 2017-06-30 22:35:10 · 4336 阅读 · 0 评论 -
Java并发系列6-Fork/Join框架
一、介绍1、Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork:把一个大任务切分为若干子任务并行的执行。 Join:合并这些子任务的执行结果,最后得到这个大任务的结果。 上图中,上部的Task依赖于下部的Task执行,只有当各个子任务执行完成后,才能得到Task0的返回结果。2、原理原创 2017-11-12 21:03:04 · 282 阅读 · 0 评论 -
Java多线程1:创建的三种方式以及比较
1、继承Thread类public class ThreadA extends Thread { // 直接继承Thread,并覆盖其run()方法 @Override public void run() { System.out.println("ThreadA"); }}2、实现Runnable接口 Java为单亲继承,一个类只能唯一继承另一原创 2017-11-12 21:05:00 · 219 阅读 · 0 评论 -
Java多线程2:线程池的使用
一、线程池的使用1、单线程线程池public class SingleThread { public static void main(String[] args) { ExecutorServic eexecutor = Executors.newSingleThreadExecutor(); for (inti = 0; i < 5; i++) {原创 2017-11-12 21:07:59 · 267 阅读 · 0 评论 -
Java定时线程池停止超时任务
一、背景题主最近遇到一个问题,本来通过ScheduledExecutorService线程池定时调度一个任务。奈何不知道为啥跑了2个多月,其中一个任务Hang住了,那定时的任务则出现了问题。关于定时线程池,好多人任务设置好频率(比如1Min),它会按照这个间隔按部就班的工作。但是,如果其中一次调度任务卡住的话,不仅这次调度失败,而且整个线程池也会停在这次调度上。我们先从一个例子试着复现...原创 2018-07-04 15:40:08 · 8098 阅读 · 2 评论 -
Java多线程3-Thread简介
一、线程生命周期线程的状态有NEW、RUNNABLE、RUNNING、BLOCKED和TERMINATED五个状态。如下图所示: NEW:当我们new一个Thread对象后,在没有执行start方法之前,这仅仅是一个普通的Java对象。可以说线程处于NEW状态。RUNNABLE:当执行start方法后,JVM会创建一个线程并进入RUNNABLE状态,等待操作系统的调度。RUNNIN...原创 2018-07-17 21:58:50 · 350 阅读 · 0 评论 -
Java线程上下文-ThreadLocal的那些事
声明:原创文章,转载请注明出处。https://www.jianshu.com/p/6341cfa5c3cd一、概述ThreadLocal: 通常被称作线程本地变量或者线程本地存储。其含义是ThreadLocal为变量在每个线程中都创建一个副本,则每个线程可以访问自身内部的副本变量。 概念总是抽象而且晦涩的,我们从两个例子说起。1、对象间/方法间跨层传递如下图,有个多层调...原创 2018-07-15 22:25:29 · 7092 阅读 · 0 评论