Loading

合集-Java并发

摘要:线程池参数 ThreadPoolExecutor tpe = new ThreadPoolExecutor( 10, 20, 1L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadPoolExecutor.CallerRunsP 阅读全文
posted @ 2024-07-03 20:43 Duancf 阅读(87) 评论(0) 推荐(0)
摘要:Java 线程池中的四种拒绝策略在处理任务过载或资源不足时非常有用。每种策略适用于不同的场景: AbortPolicy (默认策略) 描述: 当线程池无法接受新任务时,该策略会直接抛出 RejectedExecutionException,阻止任务被执行。 使用场景: 适用于希望立即得知线程池无法处 阅读全文
posted @ 2024-09-06 22:29 Duancf 阅读(475) 评论(0) 推荐(1)
摘要:synchronized底层语义原理 Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现。 在 Java 语言中,同步用的最多的地方可能是被 synchronized 修饰的同步方法。同步方法 并不是由 monitorenter 和 monitor 阅读全文
posted @ 2024-08-15 23:18 Duancf 阅读(162) 评论(0) 推荐(0)
摘要:public class AtomicTest01 { public static int i = 0; public static void main(String[] args) { Runnable task = new Runnable(){ @Override public void ru 阅读全文
posted @ 2024-07-09 19:08 Duancf 阅读(45) 评论(0) 推荐(0)
摘要:HashMap和ConcurrentHashMap的区别 主要区别就是hashmap线程不安全,ConcurrentHashMap线程安全 HashMap线程不安全,有以下两个问题 put覆盖问题 比如有两个线程A和B,首先A希望插入一个key-value对到HashMap中,首先计算记录所要落到的 阅读全文
posted @ 2024-06-23 16:43 Duancf 阅读(52) 评论(0) 推荐(0)
摘要:Thread源码 构造方法 Thread() Allocates a new Thread object. Thread(Runnable target) Allocates a new Thread object. Thread(Runnable target, String name) Allo 阅读全文
posted @ 2024-06-23 16:57 Duancf 阅读(39) 评论(0) 推荐(0)
摘要:ThreadLocal 本文参考 参考资料 什么是内存泄漏 内存泄漏指的是,当某一个对象不再有用的时候,占用的内存却不能被回收,这就叫作内存泄漏 因为通常情况下,如果一个对象不再有用,那么我们的垃圾回收器 GC,就应该把这部分内存给清理掉。这样的话,就可以让这部分内存后续重新分配到其他的地方去使用; 阅读全文
posted @ 2024-06-23 16:58 Duancf 阅读(44) 评论(0) 推荐(0)
摘要:ThreadLocal缺点及解决方案 每个Thread上都有一个threadLocals属性,它是一个ThreadLocalMap,里面存放着一个Entry数组,key是ThreadLocal类型的弱引用,value是对值的引用。所有的操作都是基于这个ThreadLocalMap操作的。 但是它有一 阅读全文
posted @ 2024-08-09 20:55 Duancf 阅读(78) 评论(0) 推荐(0)
摘要:锁 锁的分类 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有 阅读全文
posted @ 2024-07-09 19:10 Duancf 阅读(66) 评论(0) 推荐(0)
摘要:很多人说BIO不好,会block,但到底什么是IO的Block呢?考虑下面两种情况: 用系统调用read从socket里读取一段数据 用系统调用read从一个磁盘文件读取一段数据到内存 如果你的直觉告诉你,这两种都算Block,那么很遗憾,你的理解与Linux不同。Linux认为: 对于第一种情况, 阅读全文
posted @ 2024-07-09 19:13 Duancf 阅读(97) 评论(0) 推荐(0)
摘要:Java 的 IO 分为两大类,一类是传统的 IO(Blocking IO),一类是 NIO (New IO)。 传统的 IO 基于字节流和字符流,以阻塞式 IO 操作为主。常用的类有 FileInputStream、FileOutputStream、InputStreamReader、Output 阅读全文
posted @ 2024-09-08 20:10 Duancf 阅读(146) 评论(0) 推荐(0)
摘要:可重入锁 ReentrantLock 锁对象 为什么需要锁对象 因为我们不希望有些操作被打断,例如在银行取钱的程序中,线程A正在从账户中取钱,他会进行三个操作, 读取账户金额100, 在自己的工作内存中对账户金额-100, 把0写回账户金额, 但是在第1,2步中间被线程B打断,线程B执行同样的操作, 阅读全文
posted @ 2024-07-14 21:05 Duancf 阅读(50) 评论(0) 推荐(0)
摘要:sleep()、wait()、join()、yield() yield 在Java中,yield() 是一个Thread类的静态方法,它用于暂停当前线程并允许其他线程运行。它是一种线程调度的建议,告诉调度器可以切换到其他就绪状态的线程。调用yield()方法后,线程会从运行状态转换为就绪状态,让其他 阅读全文
posted @ 2024-07-14 22:32 Duancf 阅读(51) 评论(0) 推荐(0)
摘要:多线程的价值 (这里展示的是网上的答案,我觉得真正重要的是减少进程切换的代价) 发挥多核CPU的优势 多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的,采用多线程的方式去同时完成几件事而不互相干扰。 防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因 阅读全文
posted @ 2024-07-26 20:02 Duancf 阅读(27) 评论(0) 推荐(0)
摘要:Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过Reentr 阅读全文
posted @ 2024-07-26 17:18 Duancf 阅读(150) 评论(0) 推荐(0)
摘要:参考资料 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLo 阅读全文
posted @ 2024-08-02 17:03 Duancf 阅读(56) 评论(0) 推荐(0)
摘要:Semaphore是一种同步辅助工具,翻译过来就是信号量,用来实现流量控制,它可以控制同一时间内对资源的访问次数. 无论是Synchroniezd还是ReentrantLock,一次都只允许一个线程访问一个资源,但是Semaphore可以指定多个线程同时访问某一个资源. Semaphore有一个构造 阅读全文
posted @ 2024-08-27 22:56 Duancf 阅读(112) 评论(0) 推荐(0)
摘要:CountDownLatch CountDownLatch一般用作多线程倒计时计数器,强制它们等待其他一组(CountDownLatch的初始化决定)任务执行完成。 有一点要说明的是CountDownLatch初始化后计数器值递减到0的时候,不能再复原的,这一点区别于Semaphore,Semaph 阅读全文
posted @ 2024-07-26 21:01 Duancf 阅读(54) 评论(0) 推荐(0)
摘要:CyclicBarrier 循环栅栏 CyclicBarrier 字面意思回环栅栏(循环屏障),通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。 CyclicBarrier的使用 构造方法 // pa 阅读全文
posted @ 2024-07-26 21:07 Duancf 阅读(189) 评论(0) 推荐(0)
摘要:在并发编程中,锁是一种常用的保证线程安全的方法。Java 中常用的锁主要有两类,一种是 Synchronized 修饰的锁,被称为 Java 内置锁或监视器锁。另一种就是在 J2SE 1.5版本之后的 java.util.concurrent包(下称j.u.c包)中的各类同步器,包括 Reentra 阅读全文
posted @ 2024-07-29 15:55 Duancf 阅读(169) 评论(0) 推荐(0)
摘要:1.一致性定义 关于一致性的定义,大概如下: 一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。 1.1 强一致性(Strict Consistency) 强一致性也被可以被称做: 原子一致性(Atomic Consis 阅读全文
posted @ 2024-09-10 20:01 Duancf 阅读(206) 评论(0) 推荐(0)
摘要:Thread.sleep 是 Java 中用来让当前线程进入休眠状态一段时间的方法。调用 Thread.sleep 后,线程会进入“等待”状态,直到指定的时间过去,然后自动被唤醒继续执行。 但 Thread.sleep 并不是在其他线程的干预下被唤醒的,而是依赖以下几个条件之一来结束休眠: 时间到达 阅读全文
posted @ 2024-09-09 19:57 Duancf 阅读(100) 评论(0) 推荐(0)
摘要:线程安全的List 目前比较常用的构建线程安全的List有三种方法: 使用Vector容器 使用Collections的静态方法synchronizedList(List< T> list) 采用CopyOnWriteArrayList容器 使用Vector容器 Vector类实现了可扩展的对象数组 阅读全文
posted @ 2024-09-10 21:21 Duancf 阅读(2797) 评论(0) 推荐(0)
摘要:Thread中断机制interrupt 一、中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,标记线程处于中断状态,但不会终止线程,线程还会继续执行。中断的结果线程是死亡,还是等待新的任务或是继续运行至下一步,取决于这个程序本身。线程会 阅读全文
posted @ 2024-09-25 22:09 Duancf 阅读(450) 评论(0) 推荐(0)
摘要:守护线程和普通线程的最大区别是守护线程会在主线程结束后退出,但是普通线程在主线程结束后不会退出。 普通线程的执行 import java.sql.Time; import java.util.concurrent.ExecutorService; import java.util.concurren 阅读全文
posted @ 2024-09-14 21:19 Duancf 阅读(34) 评论(0) 推荐(0)
摘要:在 Java 中,线程的并行等待(即等待多个线程并行执行完毕)通常可以通过以下几种方式来实现。我们要确保多个线程能够并行执行,并在所有线程执行完毕后再继续后续的操作。这种场景通常可以用在并发任务的协调中。以下是几种常见的实现方式: 1. 使用 Thread.join() 方法 join() 方法是最 阅读全文
posted @ 2024-09-28 15:46 Duancf 阅读(471) 评论(0) 推荐(0)