首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏狗哥的 Java 世界

    Java 并发9)ConcurrentHashMap 源码分析

    Java 为我们提供了一个现成的哈希结构,那就是 HashMap 类,在前面的文章中我曾经介绍过 HashMap 类,知道它的所有方法都未进行同步,因此在多线程环境中是不安全的。 为此,Java 为我们提供了另外一个 HashTable 类,它对于多线程同步的处理非常简单粗暴,那就是在 HashMap 的基础上对其所有方法都使用 synchronized 关键字进行加锁。 核心构造器需要传入三个参数,分别是初始容量,加载因子和并发级别。在前面介绍成员变量时我们可以知道默认的初始容量为 16,加载因子为 0.75f,并发级别为 16。 9. 自旋时具体做了些什么? 自旋操作也是在 JDK1.7 中添加的,为了避免线程频繁的挂起和唤醒,以此提高并发操作时的性能。

    83110发布于 2020-04-15
  • 来自专栏开发语言-Java

    Java并发编程学习9-并发基础演练

    HashMap + 并发机制我们首先能想到的就是,通过 HashMap 和并发机制来构建缓存,代码示例如下:public interface Computable<A, V> { V compute 虽然这种方法能确保线程安全性,但每次只有一个线程能执行 compute 方法,其他线程可能就被阻塞很长时间,严重影响计算的并发性。 看过笔者前面的博文,相信大家很容易想到并发工具类中的 FutureTask 可以实现上面的效果。回顾:FutureTask 表示一个计算的过程,这个过程可能已经计算完成,也可能正在进行。 factor=1231231234 或者 使用 JMeter 模拟多用户高并发请求。 总结本篇演示了如何通过前面学到的并发基础构建模块,来逐步构建一个 “高效且可伸缩” 的结果缓存,一定程度上能够为我们设计和开发并发应用程序带来一些思考。

    21211编辑于 2024-10-05
  • 来自专栏后端精进之路

    Java并发编程系列-(9) JDK 8910中的并发

    extends V> fn) { return biApplyStage(null, other, fn); } 例子如下: 支持timeout 在JDK9之后的CompletableFuture 简单粗暴的分散了高并发下的竞争压力。 答案就在LongAdder的java doc中,从我们翻译的那段可以看出,LongAdder适合的场景是统计求和计数的场景,而且LongAdder基本只提供了add方法,而AtomicLong还具有cas 从java doc中可以看出,其适用于统计计数的场景,例如计算qps这种场景。在高并发场景下,qps这个值会被多个线程频繁更新的,所以LongAdder很适合。 ---- 参考: https://www.jianshu.com/p/22d38d5c8c2a 《实战Java并发程序设计》

    40510编辑于 2023-10-19
  • 来自专栏悠扬前奏的博客

    Java并发-9.线程的终止

    deprecated,不建议使用 安全的终止线程 中断操作可以取消或停止任务 利用一个boolean变量控制 示例代码: package com.junzerg.threads; import java.util.concurrent.TimeUnit

    82420发布于 2019-05-28
  • 来自专栏精讲JAVA

    Java 8 和 Java 9并发工具的改变

    来源:鸟窝, colobu.com/2018/03/12/Concurrency-Utilities-Enhancements-in-Java-8-Java-9/ 转自:ImportNew Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。 java.util.concurrent.atomic中的新类 为了并发计算count、sum, 新引入了 DoubleAccumulator , DoubleAdder , LongAccumulator /jeps/266 Java 9 series: Concurrency Updates https://www.voxxed.com/2016/10/java-9-series-concurrency-updates / Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。

    70520发布于 2018-07-30
  • 来自专栏精讲JAVA

    Java 8 和 Java 9并发工具的改变

    来源:鸟窝, colobu.com/2018/03/12/Concurrency-Utilities-Enhancements-in-Java-8-Java-9/ 转自:ImportNew Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。 java.util.concurrent.atomic中的新类 为了并发计算count、sum, 新引入了 DoubleAccumulator , DoubleAdder , LongAccumulator /jeps/266 Java 9 series: Concurrency Updates https://www.voxxed.com/2016/10/java-9-series-concurrency-updates / Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。

    72820发布于 2018-07-30
  • 来自专栏JAVA并发编程

    JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析

    package lading.java.mutithread;import cn.hutool.core.date.DateTime;import java.util.Random;import java.util.concurrent.BrokenBarrierException ;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.CyclicBarrier;/** * 模拟拼团,并通知仓库发货 nanos = trip.awaitNanos(nanos); } ........ }今天就分享这么多,明天我们继续分享并发编程里的

    30520编辑于 2024-09-20
  • 来自专栏产品优化

    Java 并发编程·Java 并发

    Java 并发 线程状态转换 新建(New) 创建后尚未启动。 可运行(Runnable) 可能正在运行,也可能正在等待 CPU 时间片。 時雨:在 《Java 并发核心知识体系精讲》中,参考 Oracle 官方文档,标注实现多线程方式只有两种:实现 Runnable 接口和继承 Thread 类。 (ExecutorInterruptExample.java:9) at ExecutorInterruptExample$$Lambda$1/1160460865.run(Unknown Source 9 2. 在 Java 内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。

    3.2K32编辑于 2022-12-01
  • 来自专栏JUC并发原理与源码

    JUC并发9.并发安全集合二

    大纲1.并发安全的数组列表CopyOnWriteArrayList2.并发安全的链表队列ConcurrentLinkedQueue3.并发编程中的阻塞队列概述4.JUC的各种阻塞队列介绍5.LinkedBlockingQueue 的初始化并发安全的HashMap是ConcurrentHashMap并发安全的ArrayList是CopyOnWriteArrayList并发安全的LinkedList是ConcurrentLinkedQueue //A thread-safe variant of java.util.ArrayList in which all mutative operations //(add, set, and so on 并发安全的HashMap是ConcurrentHashMap并发安全的ArrayList是CopyOnWriteArrayList并发安全的LinkedList是ConcurrentLinkedQueue 为了保证多线程写的高并发性能,会大量采用CAS进行无锁化操作。同时会让很多读操作比如常见的size()操作,不使用锁。因此使用这些并发安全的集合时,要考虑并发下的统计数据的不一致问题。

    26610编辑于 2025-04-29
  • 来自专栏JUC并发原理与源码

    JUC并发9.并发安全集合三

    大纲1.并发安全的数组列表CopyOnWriteArrayList2.并发安全的链表队列ConcurrentLinkedQueue3.并发编程中的阻塞队列概述4.JUC的各种阻塞队列介绍5.LinkedBlockingQueue public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable 这样在并发出队和入队的时候,出队和入队就可以同时执行,不会锁冲突。这也是锁优化的一种思想,通过将一把锁按不同的功能进行拆分,使用不同的锁控制不同功能下的并发冲突,从而提升性能。 所以第一个队列会存在高并发写的情况,因此LinkedBlockingQueue不合适。

    19900编辑于 2025-04-29
  • 来自专栏路人甲Java

    java并发系列 - 第9天:用户线程和守护线程

    java并发系列第9篇文章 守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。 示例代码: package com.itsoku.chat03; import java.util.concurrent.TimeUnit; /** * 微信公众号:路人甲Java,专注于java java并发系列目录: 1.java并发系列-第1天:必须知道的几个概念 2.java并发系列-第2天:并发级别 3.java并发系列-第3天:有关并行的两个重要定律 4.java并发系列 - 第4天:JMM相关的一些概念 5.java并发系列第5天-深入理解进程和线程 6.java并发系列 - 第6天:线程的基本操作 7.java并发系列 - 第7天:volatile与Java内存模型 8.java并发系列 - 第8天:线程组

    82820发布于 2019-12-10
  • 来自专栏程序猿DD

    Java 9 - 17 特性解读:Java 9

    所以胖哥抽时间梳理了一下从Java 9Java 17的一些常用API的变动。今天先来看看Java 9 都有什么东西。 Java 9 Java 9 最大的变化就是引入了一个JShell和模块化,日常并没有用太多,所以今天不花时间在这些功能上面。 Java 9改善了这一现状,现在你可以: // [1, 2, 3, 4] List<Integer> integers = List.of(1, 2, 3, 4); // {1,2,3} Set<Integer Stream扩展 Stream API 是Java 8中引入的最重要的特性之一。在Java 9中Stream进一步得到了加强。 总结 其实Java 9 还有一些底层的优化,不过对于普通开发者来说了解这些就够用了。上面几个特性,比较常用的就是静态不变集合、try-with-resources优化。

    54730编辑于 2023-04-04
  • 来自专栏look Java

    😀 Java并发 - (并发基础)

    Java并发 - (并发基础) 1、什么是共享资源 堆是被所有线程共享的一块内存区域。在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例 Java中几乎所有的对象实例都在这里分配内存。 为了提高性能,编译器和处理器常常会对指令做重排序; 重排序不会影响单线程的执行结果,但是在并发情况下,可能会出现诡异的BUG。 参考地址:https://zhuanlan.zhihu.com/p/298448987 3、JMM 并发编程的关键目标 并发编程需要处理两个关键问题,即线程之间如何通信和同步。 并发编程的内存模型 共有两种并发编程模型:共享内存模型、消息传递模型,Java采用的是前者。 Model的缩写,Java线程之间的通信由 JMM 控制,即 JMM决定一个线程对共享变量的写入何时对另一个线程可见。

    47910编辑于 2023-12-07
  • 来自专栏码农小胖哥的码农生涯

    Java 9Java 17之Java 9

    所以胖哥抽时间梳理了一下从Java 9Java 17的一些常用API的变动。今天先来看看Java 9 都有什么东西。 Java 9 Java 9 最大的变化就是引入了一个JShell和模块化,日常并没有用太多,所以今天不花时间在这些功能上面。 Java 9改善了这一现状,现在你可以: // [1, 2, 3, 4] List<Integer> integers = List.of(1, 2, 3, 4); // {1,2,3} Set<Integer Stream扩展 Stream API 是Java 8中引入的最重要的特性之一。在Java 9中Stream进一步得到了加强。 总结 其实Java 9 还有一些底层的优化,不过对于普通开发者来说了解这些就够用了。上面几个特性,比较常用的就是静态不变集合、try-with-resources优化。

    96430发布于 2021-09-29
  • 来自专栏nice_每一天

    Java并发编程二】Java并发

    1.Java容器 1.1.同步容器 Vector ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。 > tab[] = table; 9 int hash = key.hashCode(); 10 int index = (hash & 0x7FFFFFFF) % tab.length 这个机制允许任意数量的读线程可以并发访问Map,读者和写者也可以并发访问Map,并且有限数量的写进程还可以并发修改Map,结果是为并发访问带来更高的吞吐量,同时几乎没有损失单个线程访问的性能。    并发队列 2.1.ConcurrentLinkedQueue ConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无所的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue 在Java中,BlockingQueue的接口位于java.util.concurrent 包中(在Java5版本开始提供),由上面介绍的阻塞队列的特性可知,阻塞队列是线程安全的。

    1K10发布于 2019-05-10
  • 来自专栏后端精进之路

    Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable、HashMap、TreeMap、HashSet、LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比。 ---- 参考: https://tech.meituan.com/2016/06/24/java-hashmap.html https://juejin.im/post/5aa5d8d26fb9a028d2079264 concurrencyLevel 并发度:默认16。 如果并发度设置的过小,会带来严重的锁竞争问题;如果并发度设置的过大,原本位于同一个Segment内的访问会扩散到不同的Segment中,CPU cache命中率会下降,从而引起程序性能下降。 在高并发下的情况下如何保证取得的元素是最新的?

    48410编辑于 2023-10-19
  • 来自专栏迁移内容

    彻底理解Java并发Java并发工具类

    本篇内容包括:Java 并发工具类的介绍、使用方式与 Demo,包括了 CountDownLatch(线程计数器)、CyclicBarrier(回环栅栏)、Semaphore(信号量) 以及 Exchanger CountDownLatch(线程计数器) CountDownLatch 线程计数器,俗称闭锁,作用是类似加强版的 Join,是让一组线程等待其他的线程完成工作以后才执行 CountDownLatch 类位于 java.util.concurrent

    78220编辑于 2022-12-01
  • 来自专栏迁移内容

    彻底理解Java并发Java并发原子类

    在 Jdk1.5 开始 Java 开始引进提供了 java.util.concurrent.atomic 包,到 Jdk8 时,atomic 包共提供了 16 个原子类,分为 6 种类型,分别是:①、基本类型原子类 当多线程更新变量的值时,可能得不到预期的值,当然增加 syncronized 关键字可以解决线程并发的问题。但原子类提供了一种用法简单,性能高效,线程安全的更新变量的方式。 原子类相较于 synchronized 关键字和 lock,有着以下的优点: 简单:操作简单,底层实现简单 高效:占用资源少,操作速度快 安全:在高并发和多线程环境下要保证数据的正确性 但是,在并发量很大的场景下,Atomic 基本类型原子类(AtomicInteger 和 AtomicLong)有很大的性能问题。

    81620编辑于 2022-12-01
  • 来自专栏面试题详解

    Java并发Java线程

    大家好,这里是淇妙小屋,一个分享技术,分享生活的博主 后续会发布更多MySQL,Redis,并发,JVM,分布式等面试热点知识,以及Java学习路线,面试重点,职业规划,面经等相关博客 转载请标明出处 Java线程面试题 0.1 线程占用的内存 JDK1.4默认单个线程占用256K JDK1.5默认单个线程占用1M 可以通过-Xss参数设定 0.2 为什么要使用线程池 手动创建线程池的缺点 不受风险控制 消亡的开销,性能佳 线程池优点 降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行 方便线程并发数的管控

    2.6K22编辑于 2022-03-30
  • 来自专栏公众号:懒时小窝

    Java】A Guide to Java 9 Modularity

    引言近期在 Baeldung 看到了一篇有关Java9模块化入门介绍的文章,整体翻译加理解下来发现确实不错,个人认为美中不足的是项目构建过于简单和偏手动,个人建议找一些简单的Java9以及之上的开源项目结合参考使用更佳 原文A Guide to Java 9 Modularity | Baeldung1. Module System (JPMS), or “Modules” for short.Java 9 在包上面引入了新的层次,正式的名称叫做 Java 平台模块系统(JPMS),或者更简单称之为“模块 Default ModulesWhen we install Java 9, we can see that the JDK now has a new structure.安装JDK9之后可以看到现在有一个新结构 比如我们使用Java9运行低版本的Java8的程序时候,可能需要添加模块化。

    40920编辑于 2023-06-27
领券