• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

标签:线程并发

更好地理解与使用 Java 并发的 Future

今天想写的也还是一些基础的东西,为什么我总是关注这些平时码业务代码很少能用到的又比较基础东西呢,主要是因为我觉得可能光写简单的业务代码可能很少有机会会遇到难题,但是也有万一,万一遇到了怎么解决,万变不离其宗,基础知识的深度决定上层建筑的高度,因此,扯正题吧,今天写的是关于JDK里面的Future。Future模式Future模式的核心思想是能……

Java 多线程知识小抄集 ( 二 )

 27. ConcurrentHashMapConcurrentHashMap是线程安全的HashMap,内部采用分段锁来实现,默认初始容量为16,装载因子为0.75f,分段16,每个段的HashEntry<K,V>[]大小为2。键值都不能为null。每次扩容为原来容量的2倍,ConcurrentHashMap不会对整个容器进行……

并发队列 : 无界非阻塞队列 ConcurrentLinkedQueue 原理探究

 一、 前言常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentLinkedQueue是如何使用CAS实现的。二、 ConcurrentLinkedQueue类图结构如图ConcurrentLinkedQueue中有两个vol……

并发队列:无界阻塞队列 LinkedBlockingQueue 原理探究

 一、前言本文介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现。二、 LinkedBlockingQueue类图结构如图LinkedBlockingQueue中也有两个Node分别用来存放首尾节点,并且里面有个初始值为0的原子变量count用来记录队列元素个数,另外里面有两个ReentrantLock的独……

Java 并发实践 — ConcurrentHashMap 与 CAS

最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念。限流算法很多,我主要就以最简单的计数器法来做引。先抽象化一下需求:统计每个接口访问的次数。一个接口对应一个url,也就是一个字符串,每调用一次对其进行加一处理。可能出现的问题主要有三个:多线程访问,需要选择合适的并发容……

并发一枝花之 ConcurrentLinkedQueue

 首先声明,本文是伪源码分析。主要是基于状态机自己实现一个简化的并发队列,有助于读者掌握并发程序设计的核心——状态机;最后对源码实现略有提及。ConcurrentLinkedQueue不支持阻塞,没有BlockingQueue那么易用;但在中等规模的并发场景下,其性能却比BlockingQueue高不少,而且相当稳定。同时,Concurre……

Java 多线程知识小抄集 ( 三 )

 本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。51. SimpleDateFormat非线程安全当多个线程共享一个SimpleDateFormat实例的时候,就会出现难以预料的异常。主要原因是pa……

Java 多线程知识小抄集 ( 一 )

 1. interrupted与isInterrupted的区别interrupted():测试当前线程是否已经是中断状态,执行后具有状态标志清除为false的功能。isInterrupted():测试线程Thread对象是否已经是中断状态,但不清除状态标志。方法:public static boolean interrupte……

并发一枝花之 BlockingQueue

 JDK版本:oracle java 1.8.0_102继续阅读之前,需确保你对锁和条件队列的使用方法烂熟于心,特别是条件队列,否则你可能无法理解以下源码的精妙之处,甚至基本的正确性。本篇暂不涉及此部分内容,需读者自行准备。接口定义BlockingQueue继承自Queue,增加了阻塞的入队、出队等特性:public inte……

Java并发面试题

多线程java中有几种方法可以实现一个线程?继承Thread类;实现Runnable接口;实现Callable接口通过FutureTask包装器来创建Thread线程;使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService来管理前面的三种方式……

Java 中不同的并发实现的性能比较

Fork/Join框架在不同配置下的表现如何?正如即将上映的星球大战那样,Java 8的并行流也是毁誉参半。并行流(Parallel Stream)的语法糖就像预告片里的新型光剑一样令人兴奋不已。现在Java中实现并发编程存在多种方式,我们希望了解这么做所带来的性能提升及风险是什么。从经过260多次测试之后拿到的数据来看,还是增加了不少……

各种基于AQS的同步工具

因为多线程并发编程的坑比较多,而且很容易就出现了,所以设计java的大叔们贴切的为使用java的人提供了好多线程的工具,这些工具都是借助AQS开发的,也就是获取和释放同步状态那一套东西,如果你有兴趣的话可以打开它们的源代码查看一下它们是怎么实现的,我们接下来主要唠叨一下如何使用这些工具。它们能明显加快我们编写正确的并发程序的速度。下边介绍4个常用……

Java 并发编程之 Synchronized 关键字最全讲解

synchronized关键字synchronized锁什么?锁对象。锁的对象包括:this临界资源对象Class 类对象。synchronized 除了保障原子性外,其实也保障了可见性。因为 synchronized 无论是同步的方法还是同步的代码块,都会先把主内存的数据拷贝到工作内存中,同步代码块结束,会把……

鸟瞰 Java 并发框架

1. 为什么要写这篇文章几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。 类似地,……

并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究

一、 前言上节介绍了无界链表方式的阻塞队列LinkedBlockingQueue,本节来研究下有界使用数组方式实现的阻塞队列ArrayBlockingQueue。二、 ArrayBlockingQueue类图结构如图ArrayBlockingQueue内部有个数组items用来存放队列元素,putindex下标标示入队元素下标,t……

并发一枝花之 CopyOnWriteArrayList

 CopyOnWriteArrayList的设计思想非常简单,但在设计层面有一些小问题需要注意。实现看两个方法你就懂了。读元素set()public E get(int index) {    return get(getArray(), index);}final Object[] getArray() {    r……

Java Thread 总结

Ø线程的概述(Introduction)线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在。 线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。注意:Java中的多线程是一种抢占机制而不是分时机制……

Java读写锁实现原理

最近做的一个小项目中有这样的需求:整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(读>>写)更新问题。既然读写并发操作,那么就涉及到操作互斥,这里自然想到了读写锁,本文对读写锁方面的知识做个梳理。为什么需要读写锁?与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结……

并发队列 : 无界阻塞优先级队列 PriorityBlockingQueue 原理探究

 一、 前言PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现,研究过数组方式存放最小堆节点的都知道,直接遍历队列元素是无序的。二、 PriorityBlockingQueue类图结构如图PriorityBlockingQueue内部有个数组queue用来存放……

Java线程状态分析

Java线程的生命周期中,存在几种状态。在Thread类里有一个枚举类型State,定义了线程的几种状态,分别有:NEW: 线程创建之后,但是还没有启动(not yet started)。这时候它的状态就是NEWRUNNABLE: 正在Java虚拟机下跑任务的线程的状态。在RUNNABLE状态下的线程可能会处于等待状态, 因为它正在等……

Java线程池实现原理与技术II

为了能够更好地控制多线程,JDK提供了一套Executor框架,帮助开发人员有效地进行线程控制。Executor框架无论是newFixedThreadPool()方法、newSingleThreadExecutor()方法还是ewCachedThreadPool()方法,其内部实现均使用了 ThreadPoolExecutor:    p……

任务的执行与线程池(上)

任务执行的几种方式我们先来看一个现实生活中的例子,拿银行来说,每天都会有很多的客户来办理业务,每个人办理一次业务都可以称为一个任务,为了圆满的完成这些任务,银行可以按照下边的这几种方式来安排工作。串行执行银行可以让等待办理业务的客户排成一道长龙,只留一个业务员来办理业务,对应到java程序里,就相当于用1个线程来依次处理所有的任务,这种执行方……

浅谈偏向锁、轻量级锁、重量级锁

为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,几种锁的分配和膨胀过程,有助于编写并优化基于锁的并发程序。内置锁的分配和膨胀过程较为复杂,限于时间和精力,文中该部分内容是根据网上的多方资料整合而来;仅为方便查阅,后面继续分析JVM源码的时候也有个参考。如果对各……

Java并发编程之volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关……

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00