JUC
文章平均质量分 50
笔记
WaaTong
某不知名CV程序员
展开
-
LinkedBlockingQueue 怎么实现的线程安全
实现线程安全的关键在于使用了锁和条件变量来控制对队列的访问。下面是 LinkedBlockingQueue内部使用了一个锁来控制对队列的并发访问。具体来说,它使用了两个不同的锁,一个是putLock,用于;另一个是takeLock,用于。这种分离锁的设计可以。使用了两个条件变量notFull和notEmpty来实现阻塞式的添加和移除元素操作。notFull;notEmpty。条件变量的使用使得线程可以在条件不满足时等待,在条件满足时被唤醒,从而实现了阻塞式的操作。原创 2024-01-25 15:17:30 · 479 阅读 · 0 评论 -
【同步工具】CyclicBarrier和CountDownLatch的区别
一旦所有线程都到达了屏障点,CyclicBarrier 将会释放所有被阻塞的线程,它们将。是 CyclicBarrier 类中的一个方法,用于使当前线程等待直到所有线程都到达屏障点。计数器可以重复使用,一旦计数器归零,会触发一次屏障操作,然后计数器重新初始化。方法被调用后,当前线程会被阻塞,直到所有参与的线程都调用了 await()适用于多个线程相互等待,直到所有线程都到达一个公共的屏障点后再继续执行。每个线程等待其他所有线程都到达屏障点后再继续执行。计数器只能递减,一旦计数器归零,就无法重置。原创 2024-01-25 13:20:03 · 754 阅读 · 0 评论 -
ThreadPoolExecutor 的拒绝策略
ThreadPoolExecutor在任务提交时可能会遇到线程池已经饱和的情况,即所有的核心线程和队列都已经被占用,而且线程池不能再创建新的线程来执行任务。在这种情况下,ThreadPoolExecutor 会采用预定义的拒绝策略来处理这些无法执行的任务。原创 2024-01-25 09:24:56 · 662 阅读 · 0 评论 -
Executeror 构建线程池的方法
这个线程池的线程数量是不固定的,会根据需要动态增加或减少。如果有空闲线程,将会被重用,否则会创建新的线程。作为任务队列,这是一个没有容量的队列,每个任务都会触发创建新线程,或者使用现有的空闲线程。适用于需要定时执行或者周期性执行任务的场景,比如定时任务调度、定时检查等。适用于大量短时间的任务,不断变化的任务数,例如处理临时任务、异步操作等。实现特点是,它没有容量,没有线程来取是放不进去的。即使没有任务执行,线程池的核心线程会一直存活,不会被回收。这是一个固定大小的线程池,有5个线程,用于执行任务。原创 2024-01-24 16:56:28 · 1029 阅读 · 0 评论 -
ThreadPoolExecutor 线程池
ThreadPoolExecutor 使用int的高3位来表示线程池状态,低29位表示线程数量从数字上比较,TERMINATED TIDYING>STOP> SHUTDOWN>RUNNINGshutdown()SHUTDOWNSTOPTIDYINGTERMINATED。原创 2024-01-24 16:17:49 · 369 阅读 · 0 评论 -
线程安全集合类
遍历时弱一致性,例如,当利用迭代器遍历时,如果容器发生修改,迭代器仍然可 以继续进行遍 历,这时内容是旧的。求大小弱一致性,size 操作未必是 100% 准确。大部分实现基于锁,并提供用来阻塞的方法。之类容器修改开销相对较重。原创 2024-01-25 14:46:04 · 323 阅读 · 0 评论 -
【同步工具】CountDownLatch
(倒计时)是Java并发包(java.util.concurrent)中的一个同步工具,用于控制一个或多个线程。它是一种多线程协作的机制,允许一个或多个线程等待其他线程的信号。原创 2024-01-25 12:50:15 · 316 阅读 · 0 评论 -
主要的 AQS 方法
(AbstractQueuedSynchronizer)是Java中用于实现同步器的框架,位于java.util.concurrent.locks包下。它提供了一种灵活且强大的方式来实现各种同步机制,例如锁、计数器、信号量等。AQS的设计基于FIFO(先进先出)等待队列,通过内部的状态来管理线程的获取和释放锁的操作。用于独占模式,当线程尝试获取锁时调用。arg参数是一个用于表示状态的值。原创 2024-01-25 09:56:54 · 347 阅读 · 0 评论 -
ReentrantReadWriteLock
是Java并发包提供的一个读写锁实现,它允许多个线程同时读取共享资源,但在写入时只允许一个线程进行,从而提高读取操作的并发性。这种锁的设计是为了在读多写少的场景下提供更好的性能。原创 2024-01-25 10:31:17 · 394 阅读 · 0 评论 -
自定义线程池
【代码】自定义线程池。原创 2024-01-24 15:02:13 · 347 阅读 · 0 评论 -
【同步工具】Semaphore
在这个例子中,通过Semaphore来控制对该资源的并发访问。Semaphore的初始许可数量为3,因此最多允许3个线程同时访问资源。如果还有可用的许可,则线程将获得许可并继续执行。否则,线程将被阻塞,直到有可用的许可为止。是一种同步机制,用于控制同时访问某个资源的线程数量。这将增加Semaphore的许可数量,使其他被阻塞的线程有机会获取许可。这确保了同时访问资源的线程数量不超过Semaphore设置的许可数量。,如果许可不足,线程可能会被。,直到获取到足够的许可。原创 2024-01-25 11:15:59 · 357 阅读 · 0 评论 -
StampedLock
是Java并发包中引入的一种乐观读锁、悲观写锁的机制,它比传统的ReentrantReadWriteLock提供了更高的并发性。原创 2024-01-25 10:48:07 · 344 阅读 · 0 评论