青云博客 分享、记录

如何优化线程池的性能?

要优化线程池的性能,需要根据实际情况进行参数配置。以下是一些优化建议: 根据应用场景和任务性质,合理设置核心线程数(corePoolSize)和最大线程数(maximumPoolSize)。如果任务主要是IO密集型的,核心线程数可以设置为CPU核心数的两倍左右,最大线程数可以设置为CPU核心数的四倍

詹学伟 发布于 2024-04-27

线程池的底层工作原理

线程池是一种用于管理和重用线程的机制,其底层工作原理涉及线程的创建、调度、执行以及回收等关键过程。线程池的底层工作原理可以分为以下几个关键步骤: 线程池的创建: 在使用线程池之前,需要首先创建一个线程池。通常,线程池会根据配置参数(如核心线程数、最大线程数、队列类型等)来初始化线程池的基本属性。 任

詹学伟 发布于 2024-04-27

ConcurrentHashMap和Hashtable的异同点

ConcurrentHashMap 和 Hashtable 都是用于在多线程环境中存储和操作键值对的数据结构,但它们在实现和性能方面存在一些重要的异同点:

詹学伟 发布于 2024-04-27

JAVA 中怎样唤醒一个阻塞的线程

在Java中,可以使用Thread类的interrupt()方法来唤醒一个阻塞的线程。 首先,需要获取到该线程的对象,然后调用interrupt()方法。例如: Thread thread = new Thread(new Runnable() { @Override pu

詹学伟 发布于 2024-04-27

ReentrantLock中的公平锁和非公平锁的底层实现

ReentrantLock是Java中提供的一种可重入锁,它支持两种锁的模式:公平锁和非公平锁。这两种锁模式的底层实现略有不同: 公平锁(Fair Lock): 公平锁的特点是按照请求锁的顺序来分配锁,即先到先得。在ReentrantLock中,通过构造函数可以选择创建一个公平锁。公平锁的底层实现使

詹学伟 发布于 2024-04-27

JAVA 中有几种方法可以实现一个线程

在Java中,有多种方法可以实现一个线程,以下是常用的几种方式: 继承Thread类: 创建一个继承自Thread类的子类,然后重写子类的run方法,将线程的任务逻辑放在

詹学伟 发布于 2024-04-27

AQS

AQS(AbstractQueuedSynchronizer)是Java并发编程中的一个重要组件,它是一个抽象类,提供了线程同步的底层实现机制。AQS的作用是实现线程的同步和互斥操作,它提供了两种主要的锁机制,分别是排他锁和共享锁。 排他锁也称为独占锁,在多个线程竞争同一共享资源时,同一时刻只允许一

詹学伟 发布于 2024-04-27

CAS的原理

CAS(Compare And Swap)是一种乐观的并发控制机制,它的核心原理是基于硬件层面的原子性保证。CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。它的工作原理是: 在将新值写入内存之前,CAS操作会先比较内存位置的值是否与预期原值相匹配。 如果内存位置的值与预期原值

詹学伟 发布于 2024-04-27

如何停止一个正在运行的线程

要停止一个正在运行的线程,通常有几种方法,但需要根据具体情况选择适当的方式,因为线程的停止涉及到线程安全和资源释放等问题。以下是一些常用的停止线程的方法: 使用标志位: 在线程的执行体中使用一个标志位,当该标志位为true时,线程会自行退出执行。这是一种比较安全和可控的方式。例如: public c

詹学伟 发布于 2024-04-27

JMM内存模型

Java内存模型(JMM)是一种抽象的概念,用于描述在Java程序中,一组线程如何通过共享内存进行交互。JMM并不真实存在,它是一种规范,规定了程序中变量在内存中的访问方式。 在JMM中,内存主要划分为两种类型:主内存和工作内存。主内存存储了所有的对象实例和静态变量,而工作内存存储了每个线程的局部变

詹学伟 发布于 2024-04-27