【Java并发编程】
文章平均质量分 73
记录学习总结和工作中遇到的问题
玉成226
这个作者很懒,什么都没留下…
展开
-
Java并发编程: Java线程组(ThreadGroup)
Java线程组(ThreadGroup)是一种用于组织和管理线程的机制。它允许将多个线程组织成一个单元,从而更容易进行管理和控制。线程组的主要作用包括组织、控制、监视和安全性。通过线程组,可以将相似或相关的线程放在同一个组内,便于管理;可以对整个线程组执行操作,如挂起、恢复、中断等;可以获取线程组的状态信息,如活动线程数、线程组名称等;还可以用于设置安全性策略,限制组内线程的权限。原创 2024-04-08 18:21:31 · 875 阅读 · 0 评论 -
Java并发编程: TransmittableThreadLocal实现父子线程之间值传递
TransmittableThreadLocal 是 Alibaba 开源框架 transmittable-thread-local 中的一个核心类,它扩展了 Java 的标准 ThreadLocal 类。与标准的 ThreadLocal 不同,TransmittableThreadLocal 的值可以在线程之间传递,尤其是在线程池中的线程复用场景下。原创 2024-04-04 16:58:44 · 973 阅读 · 0 评论 -
Java并发编程: 第九章 CompletableFuture异步编程
CompletableFuture 提供了一种函数式编程的方式来处理异步计算的结果,允许你以非阻塞的方式组合和链接异步操作。例如,你可以使用 thenApply 来转换异步操作的结果,使用 thenCompose 来链接多个异步操作,或者使用 allOf 和 anyOf 来等待多个 CompletableFuture 完成。使用 CompletableFuture,你可以轻松地将多个异步操作组合成一个链式调用,并在每个异步操作完成后执行某些操作(比如转换结果、组合多个结果、处理异常等)。原创 2024-03-28 22:45:21 · 386 阅读 · 0 评论 -
Java并发编程:第八章 并发集合
它的主要特性在于写时复制(Copy-On-Write)的并发策略,即在修改操作(如添加、修改、删除元素)时,不是直接修改原数组,而是先复制一份底层数组,然后在副本上进行修改操作,修改完成后再将原数组的引用指向新的数组。因为每次修改操作都会创建一个底层数组的副本,从而避免了读取操作受到写入操作的干扰。总的来说,CopyOnWriteArrayList是一种适用于读多写少场景的线程安全ArrayList实现,通过写时复制的机制保证了数据的一致性和读取性能,但在写操作频繁或数据量较大的情况下可能存在性能问题。原创 2024-03-25 21:54:46 · 1107 阅读 · 0 评论 -
Java并发编程:第七章 并发工具类
在Java并发框架中,Exchanger 是一个同步点,它允许一对线程在一个点上交换对象。Exchanger 非常适合于两个线程需要相互传递数据或信息的场景,例如遗传算法中的配对交叉操作,或者流水线设计中两个工作阶段的交互。让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBrrier的await方法。信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另外一个用于并发线程的控制。原创 2024-03-25 20:17:27 · 1225 阅读 · 0 评论 -
Java并发编程:第六章 阻塞队列
不同的BlockingQueue子类之间的区别主要体现在元素存储结构和元素操作上。原创 2024-03-25 09:31:18 · 734 阅读 · 0 评论 -
Java并发编程:第五章 原子类(Atomic)
如果要原子的更新多个变量,就需要使用这个原子更新引用类型提供的类。如果只需要某个类里的某个字段,那么就需要使用原子更新字段类。通过原子的方式更新数组里的某个元素。用于通过原子的方式更新基本类型。原子更新引用类型数组里的元素。原子更新带有标记位的引用类型。原子更新带有版本号的引用类型。原子更新长整型数组里的元素。原子更新长整型字段的更新器。原子更新整型数组里的元素。原子更新引用类型里的字段。原子更新引用类型里的字段。原子更新整型字段的更新器。原创 2024-03-21 13:44:23 · 340 阅读 · 0 评论 -
Java并发编程:第四章 线程池(Executor框架)
Executors 是 Java 并发包 java.util.concurrent 中的一个工具类,它提供了一组用于创建线程池的方法。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的 ThreadFactory 创建一个新线程。Executors 工具类的主要目的是简化线程池的创建和管理。原创 2024-03-20 23:54:58 · 1249 阅读 · 0 评论 -
Java并发编程: 第三章 AQS
AQS全称是AbstractQueuedSynchronizer: 抽象队列同步器,是阻塞锁和相关同步器工具的框架是整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的队列工作,并通过一个int类型变量标识持有锁的状态资源(state)CLH队列:双向队列。原创 2024-03-12 00:45:00 · 1112 阅读 · 0 评论 -
Java并发编程: java锁种类总结
指该锁一次只能被一个线程所持有。对ReentrantLock和Synchronized而言都是独占锁。原创 2024-03-10 20:41:57 · 200 阅读 · 0 评论 -
Java并发编程: 第二章 显示锁(Lock)
用来控制多个线程访问共享资源的方式。与Java内置锁不同,JUC显示锁是一种非常灵活的、使用纯Java语言实现的锁,非常的灵活,可以进行非阻塞的、可轮询的、定时的、可中断的锁获取和释放操作。由于JUC锁的加锁和解锁的方法都是通过Java API显示进行的,因此也叫显示锁。使用Java内置锁时,不需要通过Java代码显示地对同步对象的监视器进行抢占和释放,这些工作由JVM底层完成,而且任何一个Java对象都能作为一个内置锁使用,所以Java的对象使用起来非常的方便。非阻塞的获取锁:void lock()原创 2024-03-03 21:49:27 · 807 阅读 · 0 评论 -
Java并发编程: 常用的分布式锁总结
主要利用到了MySQL中select + for update操作来达到互斥的效果。原创 2024-01-19 22:48:51 · 426 阅读 · 0 评论 -
Java并发编程: 第一章 并发编程基础
主存:主要存储的是Java实例对象,所有线程创建的实例对象都存放在主存中,无论该实例对象是成员变量还是方法中的本地变量(也称局部变量),当然也包括共享的类信息、常量、静态变量。由于是共享数据区域,因此多条线程对同一个变量进行访问可能会发现线程安全问题。原创 2024-01-18 22:00:39 · 1053 阅读 · 0 评论 -
Java并发编程: 并发编程中的ExecutionException异常
在并发编程中在执行java.util.concurrent.Future实现类的get方法时,需要捕获java.util.concurrent.ExecutionException这个异常。Future.get()方法通常是要获取任务的执行结果,当执行任务的过程中抛出了异常,就会产生ExecutionException异常。原创 2024-01-18 19:55:48 · 533 阅读 · 0 评论 -
Java并发编程: ExecutorCompletionService详解
当在项目中我们向使用线程池处理任务时,在任务处理完成后想要的到返回值进而进行其他的逻辑处理,这个时候就可以使用ExecutorCompletionService类,任务执行完成后即可根据返回值进行其他的逻辑处理。原创 2024-01-15 17:04:17 · 909 阅读 · 0 评论 -
Java多线程25:线程中异常的处理方式
方法setUncaughtExceptionHandler()是给指定线程对象设置的异常处理器。程序运行后台在控制台输出空指针异常。在Java的多线程技术中,可以对多线程中的异常进行“捕捉”,使用的是UncaughtExceptionHandler类,从而可以对发生的异常进行有效的处理。方法setDefaultUncaughtExceptionHandler()的作用是为指定线程类的所有线程对象设置默认的异常处理器。原创 2018-10-16 17:25:41 · 2801 阅读 · 1 评论 -
Java多线程3:Thread中的方法
获取当前线程的对象currentThread()方法可返回代码段正在被哪个线程调用的信息。public class Demo2_Current { public static void main(String[] args) { new Thread() { public void run() { ...原创 2018-09-25 22:56:31 · 109 阅读 · 1 评论 -
Java多线程2:多线程程序的2种实现方式
前言一个进程正在运行时至少会有1个线程在运行,这种情况载Java中也是存在的。这些线程在后台默默的执行,比如 public static void main(String[] args)方法的线程就是这样的,而且它是由JVM创建的。...原创 2018-09-25 16:46:59 · 353 阅读 · 1 评论 -
Java多线程5:方法内部变量为线程安全
非线程安全问题存在于实例变量中,如果是方法内部的私有变量,则不存在非线程安全问题,所得到的结果是线程安全的。原因(1)方法内部的变量为方法私有的变量,其生存周期随着方法的结束而终结。(2)每个线程执行的时候会把局部变量存放在各自栈帧的工作内存中(栈帧进入虚拟机栈),虚拟机栈线程间不共享,故不存在线程安全问题。示例public class Demo1_jubuanquan { pub...原创 2018-09-28 22:22:02 · 3706 阅读 · 0 评论 -
Java多线程1:进程和线程概述
进程进程可以理解为受操作系统管理的基本运行单元。360浏览器是一个进程、WPS也是一个进程,正在操作系统中运行的".exe"都可以理解为一个进程。百度百科对进出的解释:进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。线程1 什么是多线程进程中独立运行的子任务就是一...原创 2018-09-25 11:41:42 · 148 阅读 · 0 评论