文章506
标签266
分类65
golang并发素数筛-并发真的会快吗?

golang并发素数筛-并发真的会快吗?

Golang给了我们更加方便和简洁的语法实现并发操作,但是使用并发操作是需要考虑应用场景的,不考虑背景而滥用并发反而可能造成性能危机:有时并发操作并不一定比单线程的效率高;

本文首先通过素数筛方法并发计算质数,展现了golang以CSP为并发模型的并发编程特色;之后与单线程实现做对比,引出并发编程需要考虑背景的结论;

源代码:https://github.com/JasonkayZK/Go_Learn/tree/prime


关于协程的一些思考

关于协程的一些思考

在Java开发中,并发编程是一个不可或缺的东西。甚至有不会并发就相当于不会编程的言论。传统并发模型中有进程和线程的概念,而熟悉Python的同学应该有过使用yield的经历,而yield关键字就使用了协程的概念;并且在现在golang大火的环境下,golang中也通过协程来解决了并发编程的问题;

本文内容包括:

  • 什么是协程
  • 协程和线程的区别
  • 为什么需要协程
  • 协程的由来
  • 协程的实现原理
  • 协程的好处
  • Java中的协程

深入理解AQS实现原理

深入理解AQS实现原理

AQS全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件

本文内容包括:


Java阻塞队列

Java阻塞队列

前面讲解了线程池的原理, 而线程池任务的存储采用的是阻塞队列(需要的话要通过构造方法传入一个阻塞队列). 所以本篇介绍Java中的阻塞队列

在JUC包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题, 通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利

本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景

本文内容包括:

  • 初识阻塞队列
  • 阻塞队列的成员
  • 阻塞队列原理及使用
    • DelayQueue
    • ArrayBlockingQueue
    • LinkedBlockingQueue

文章转自: Java 阻塞队列–BlockingQueue


Java线程池ThreadPoolExecutor分析与实战终

Java线程池ThreadPoolExecutor分析与实战终

前面两篇文章分析了Java中几种常见的线程池, 下面我们通过源码来看一看他们究竟在最底层是怎么实现的

本文内容包括:

  • ctl属性;
  • ThreadPoolExecutor中其他属性;
  • 任务提交的实现;
  • 内部类Worker(任务执行, 终止)
  • 线程池终止
  • 线程池的监控
  • 线程池的安排

源代码分析基于JDK11.0.5

如果觉得文章写的不错, 可以关注微信公众号: Coder张小凯

内容和博客同步更新~


系列文章入口:


Java线程池ThreadPoolExecutor分析与实战续

Java线程池ThreadPoolExecutor分析与实战续

在上一篇Java线程池ThreadPoolExecutor分析与实战的文章中, 手写了一个简单的线程池. 这篇紧接着上一篇, 通过分析JUC线程池源码, 来看看JDK中是如何设计线程池的

本文内容包括:

  • Executor接口
    • Executor接口源码分析
    • Executor两级调度模型
    • Executor结构
  • ExecutorService接口源码分析
  • AbstractExecutorService抽象类源码分析
  • 四种类型的线程池
    • ThreadPoolExecutor提供的构造函数
    • 线程池的处理流程
    • 四种线程池(Fixed, Cached, Single, Scheduled
    • 如何选择合适的线程池

文章部分节选自: Java线程池-ThreadPoolExecutor原理分析与实战

源代码分析基于JDK11.0.5

如果觉得文章写的不错, 可以关注微信公众号: Coder张小凯

内容和博客同步更新~


并发排序从ForkJoin到Stream

并发排序从ForkJoin到Stream

在前面几种常见排序方法的优化(下)一文中, 我总结了针对归并排序的一些优化方法.但是即使是优化, 整个排序过程也是建立在单个线程当中的

而自顶向下的归并排序在将数组拆分之后, 左右两部分是不会被同一个递归栈访问的, 容易想到可以开辟两个线程(递归的)分别进行左右归并排序

本篇就在此基础之上探讨有关ForkJoin和Stream的一些操作

本文内容包括:

  • ForkJoin简单讲解
  • 基于多线程(ForkJoin)的归并排序的实现
  • 使用Stream进行并发排序
  • 排序性能测试

源代码:

如果觉得文章写的不错, 可以关注微信公众号: Coder张小凯

内容和博客同步更新~


Java线程池ThreadPoolExecutor分析与实战

Java线程池ThreadPoolExecutor分析与实战

Java并发总结-3-ThreadLocalRandom类

Java并发总结-3-ThreadLocalRandom类

ThreadLocalRandom类是JDK 7 在JUC下新增的随机数生成器, 弥补了在多线程下的缺陷. 本文主要讲解为何要在JUC下新增该类, 以及该类的实现原理!

Java并发编程-2-锁的概述

Java并发编程-2-锁的概述

本文主要总结了Java多线程编程中各种锁的种类以及概述:

  • 乐观锁与悲观锁
  • 公平锁与非公平锁
  • 独占锁和共享锁
  • 可重入锁和不可重入锁
  • 自旋锁

图为Java线程的生命周期.