多线程编程指南

     

Java中volatile副作用:不使用CPU缓存

1086 2K

高速缓存位于在CPU和主内存之间,是一个速度更快的内存模块,其总体目的是提升性能。缓存通常是由具有不同大小和访问时间的几个层次级别组成。L1缓存是最小和最快的。L2更大而更慢。L3更大甚至更慢-但仍然.

给线程池取一个名称有助于调试 - bozho

1059

我们的软件倾向于使用大量线程池-主要是通过java.util.concurrent.ExecutorService实现(通过创建Executors.new...。我们为各种异步用例创建线程池,并且可以.

Java线程是耗费内存的 -DZone

1157

这项研究清楚地表明,内存是在创建时分配给线程的,而不是根据线程的运行时需求分配的。超级工作线程和几乎休眠的线程都消耗相同数量的内存。现代Java应用程序倾向于创建数百个(有时数千个)线程。但是这些线程.

Project Loom抢先体验版

1772

这些早期访问版本在GNU通用公共许可证版本2下提供,带有Classpath Exception。Linux / x64tar.gz (sha256)184593521macOS / x64tar.gz.

Project Loom的用户模式线程或协程的性能是否一定很好? - Dukesletter

3129 1

Project Loom继续前进,并引起了讨论:用户模式线程如何提供比OS线程更好的应用程序性能?OpenJDK的Project Loom的技术主管Ron Pressler在“ 关于用户模式线程和协程.

JVM中的线程本地分配缓冲区TLAB是什么? - alidg

2093

JVM在分配新对象时,将在专用于原始线程的TLAB(线程本地分配缓冲区)中分配该对象。由于每个线程只能写入自己的TLAB,因此不需要同步。TLAB默认情况下处于启用状态,但如果您疯了,可以随时使用-X.

Java并发中volatile和happen before是什么? - javarevisited

1484 2K

要了解happen before,需要首先了解如果多个线程访问同一个变量会发生什么问题?尤其是当一个线程写入该变量,而一个线程同时从该变量读取时。例如,假设我们有以下由线程T1执行的代码(请注意,整数.

该不该使用Reactive编程?先预览一下Loom项目中的Reactive模型和协程 - frankel

2676 2 4K

Java 15将发布Project Loom的第一个版本。我相信这将改变JVM。在本文中,我想深入探讨导致我相信这一点的原因。首先,我们需要了解核心问题。然后,我将尝试描述以前的技术如何解决它。之后,.

Rust语言异步编程简介 - Shakaib

2586 4K

我认为可以肯定地说,Rust最令人期待的语言功能之一终于落地了。我假设您一些有关Rust的语法和生态系统的基础知识。但是在深入研究编码部分之前,让我们用Async的定义介绍异步编程的一些基本概念。异步.

ReadWriteLock读写锁升级的踩坑:Kotlin作弊,最好使用StampedLock - javaspecialists

3312 7K

在Java 5中,我们获得了ReadWriteLock接口,并带有ReentrantReadWriteLock实现。它具有明智的限制,我们可以将写锁降级为读锁,但不能将读锁升级为写锁。当我们尝试时,我.

如何在Java中使用同步 -Manusha

1363 4K

在本文中,您将学习为什么我们需要Java同步,如何编写同步的代码以及有关同步的更重要的要点。为什么要使用同步?如果您的代码在多线程环境中运行,则需要同步在多个线程之间共享的对象。否则,可能会发生两种类.

使用CountDownLatch或循环屏障对多线程代码进行单元测试 -Xebia

1717 4K

随着处理器比以往包装更多的内核,并发编程已成为最有效利用它们的最前沿。但是,事实是并发程序的设计,编写,测试和维护要困难得多。因此,如果我们毕竟可以为并发程序编写有效且自动化的测试用例,则可以解决其中.

抢拍神器的关键:优化提升Java线程局部随机数ThreadLocalRandom高并发技巧 - alidg

2130 13K

在本文中,探讨将Java随机数算法优化为高吞吐量和低延迟的各种技巧。技巧包括更有效的对象分配,更有效的内存访问,消除不必要的间接访问以及机械同情。(对于分布式环境的抢拍很重要)Java 7引入了,Th.

Java线程池newCachedThreadPool()与newFixedThreadPool()区别 | Baeldung

2871 3K

当涉及线程池实现时,Java标准库提供了很多选择。在这些实现中,固定线程池和缓存线程池非常普遍。缓存线程池newCachedThreadPoolExecutors.newCachedThreadPoo.

对响应式编程的怀疑 - lukaseder

1858

响应式编程肯定很优雅,但是小伙子,即使对于最次要的任务,它是否也会增加认知负担……必须有一种更简单的方法来实现。众说纷纭:基础架构逻辑/业务逻辑比率确实不好。让我想起了EJB 2.0实体。我很少觉得有.

每个锁创建多个条件队列以避免虚假唤醒

1219 4K

多个条件队列以实现更好的并发性。每个锁使用单独的条件队列的优点。 它避免了虚假的唤醒和上下文切换。例如,如果您使用notifyAll进行传统等待,则最终会唤醒正在等待不同条件的线程。 当您在单独的条件.

为什么我们需要volatile关键字?

2 2509 2 5K

volatile字段以确保多个线程始终看到最新值,即使缓存系统或编译器优化正在起作用。从volatile变量读取始终返回此变量的最新写入值。java.uti.concurrent包中的大多数类的方法也.

线程池模式(Thread Pool Pattern)

2588 25K
目的通常情况下,要执行的任务是短期的,并且任务数量很大。为每个任务创建一个新线程会使系统花费更多时间来创建和销毁线程,而不是执行实际任务。线程池通过重用现有线程并消除创建新线程的延迟来解决此问题。说明.

ThreadLocal模式

1211 41K
目的将全局变量固定到线程,以防被其他线程破坏。如果在可调用对象或可运行对象中使用非只读的类变量或静态变量,则需要这样做。通过应用本地线程模式Thread Local Pattern,您可以在处理请求的.

读写锁(Reader Writer Lock)

3532 1 42K
目的假设我们有一个共享内存区域,上面详细介绍了基本约束。可以保护互斥锁后面的共享数据,在这种情况下,没有两个线程可以同时访问数据。但是,此解决方案不是最理想的,因为读取器R1可能具有锁定,然后另一个读.

保护性暂挂模式(Guarded Suspension Pattern)

2376 34K
目的如果要对未处于正确状态的对象执行方法,请使用Guarded Suspension Pattern来处理某种情况。维基百科说在并发编程中,guarded suspension是用于管理操作的软件设计.

反应式编程是正确的方法吗? - JAXenter

2946 1

反应式编程承诺具有较低内存要求的企业Java应用程序的更高性能。通过避免阻塞始终导致操作系统中的进程和上下文切换的调用来实现此承诺。这种上下文切换具有高CPU和存储器开销,当然,这些开关减少了更少。然.

如何避免死锁和活锁? - simar

4591 5K

死锁只能在并发(多线程)程序中发生,其中同步(使用锁)线程访问一个或多个共享资源(变量和对象)或指令集(临界区)。活锁时当我们试图避免死锁时会使用异步锁定时发生的,其中多个线程对同一组锁的竞争写操作,.

Node.js中线程的完整指南 – LogRocket

1801 8K

很多人想知道单线程Node.js如何与多线程后端竞争。因此,考虑到其所谓的单线程特性,许多大公司选择Node作为其后端似乎违反直觉。 当我们说Node是单线程时,我们必须理解我们的真正含义。通常支持多.

KeyDB:Redis的多线程版本

4407 3

Redis是单线程的,而KeyDB是Redis的高性能分支版本,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如FLASH存储支.

Java多线程傻瓜入门介绍

1011 5K

现代计算机能够同时执行多个操作。在硬件改进和更智能的操作系统的支持下,多个操作的功能使您的程序在执行速度和响应速度方面运行得更快。编写利用这种功能的软件既迷人又棘手:它要求您了解计算机引擎盖下发生的情.

在Java中本地进行线程间数据传输的三种方式和源码展示

1845 3K

在线程之间进行通信或发信号时首先想到的是java.lang.Object类方法:wait,notify和notifyAll。这是最基本和最广泛认可的概念,但本博客并非讲这些。JVM实例上运行的线程缺少.

异步编程:协作性多任务处理

2003 2K

如何确保同时处理多个请求,我们可以使用线程或进程进行多任务处理实现,但还有一个选择 - 协作性多任务处理。这个选项是最困难的。在这里我们说操作系统当然很酷,它有调度程序/计划程序,它可以处理进程,线程.

JVM中的线程行为 -JavaWorld

1015 10K
线程化是指同时执行编程过程以提高应用程序性能的实践。虽然直接在业务应用程序中使用线程并不常见,但它们一直在Java框架中使用。例如,处理大量信息的框架(如Spring Batch)使用线程来管理数据。.

利用Lambda表达式进行Java中的惰性求值

2016 5K

在java中,懒性求值也称懒计算lazy evaluation功能可能被忽视了(实际上,在语言层面,它几乎仅限于最小求值的实现) - 例如Scala等高级语言区分了按值调用和按名称调用,或引入像laz.