自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 【无标题】

2025-08-14 15:45:29 91

原创 多线程:(九)ConditionObject

在 Java 中,传统的线程间通信机制是使用Object类的wait()notify()和方法,这些方法必须和关键字一起使用。而提供了一种更灵活、更强大的线程间通信机制,它可以与显式锁(如)结合使用,允许线程在特定条件下等待,并且可以精确地唤醒指定条件队列中的线程。System.out.println("子线程获取锁资源并await挂起线程");try {try {System.out.println("子线程挂起后被唤醒!持有锁资源");}).start();

2025-03-18 15:09:49 323

原创 多线程:(八)ReentrantLock锁分析

AQS 即 AbstractQueuedSynchronizer,是 Java 并发编程中一个非常重要的抽象类,ReentrantLock,ThreadPoolExecutor,阻塞队列等等都是基于AQS实现。其核心属性如下:state:一个整型变量,用于表示同步状态。不同的同步器对state有不同的含义,例如在中,state表示锁的重入次数。该变量由CAS方式修改。head,tail:分别指向队列的头节点和尾节点,用于管理等待获取同步状态的线程队列。AQS内部结构和属性。

2025-03-17 21:29:23 691

原创 多线程:(七)锁的分类&synchronized锁分析

在 Java 中,锁是用于实现线程同步和并发控制的重要工具,它可以保证在多线程环境下对共享资源的安全访问,避免多个线程同时操作共享资源而引发的数据不一致、竞态条件等问题。

2025-03-13 21:07:01 1065

原创 多线程:(六)并发编程的有序性

有序性指的是程序按照代码的先后顺序依次执行。在单线程环境下,程序的执行顺序看起来和代码的编写顺序是一致的,编译器和处理器的优化不会影响程序的最终结果。然而,在多线程环境中,由于编译器、处理器的优化以及指令重排序等因素,程序的执行顺序可能会与代码的编写顺序不一致,这就可能导致程序出现逻辑错误,因此需要保证程序在并发环境下也具有有序性。我们来看一段代码i++) {a = 0;b = 0;x = 0;y = 0;a = 1;x = b;});b = 1;y = a;});

2025-03-12 17:19:52 738

原创 多线程:(五)并发编程的可见性

可见性指的是当一个线程对共享变量进行了修改,其他线程能够立即察觉到这个修改。也就是说,一个线程对共享变量的更新对于其他线程来说是立即可见的,能够保证各个线程看到的共享变量的值是一致的、最新的。没有实现可见性会造成什么问题呢?举个例子,有两个线程 A 和 B,线程 A 修改了一个共享变量 x 的值,但是还没有来得及将修改后的值写回主内存,此时线程 B 从主内存读取 x 的值,就可能读到的是旧值,而不是线程 A 修改后的新值。// ....System.out.println("t1线程结束");})

2025-03-11 20:30:45 734

原创 多线程:(四)并发编程的原子性

原子性是指在一个操作或一系列操作中,要么所有的操作都执行成功,要么都不执行。不存在只执行了一部分操作的中间状态,就好像这个操作是一个不可分割的整体,在执行过程中不会被其他操作打断或干扰。// 静态变量// 执行++操作的方法try {count++;// 一个执行了100次++操作的线程t1i < 100;i++) {});// 一个执行了100次++操作的线程t2i < 100;i++) {});t1.start();t2.start();t1.join();

2025-03-10 21:52:15 1118

原创 多线程:(三)线程的常用方法

线程的常用方法

2025-03-06 22:06:03 1049

原创 多线程:(二)线程的状态

一个线程从创建到结束的生命周期,共有几种状态?需要说明的是,这里原文有诸多英文注释,为求简洁,笔者已将其删除。下面我们来逐一解释:新建(NEW):当线程被创建但尚未启动时,它处于新建状态。也即尚未调用start()方法的线程。此时线程已经被分配了内存空间,初始化了相关的属性,但还没有开始执行线程中的代码。当线程调用start()方法后,它就进入可运行状态。为什么是可运行?

2025-03-05 21:54:13 990

原创 多线程:(一)线程的创建方式

线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

2025-03-04 21:33:50 306

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除