多线程
文章平均质量分 94
刻苦的刘同学
不积跬步无以至千里。
展开
-
Java多线程:回环屏障CyclicBarrier的使用(八)
CyclicBarrier(回环屏障),阻塞一组线程,直至某个状态之后再全部同时执行,并且所有线程都被释放。和之前说的CountdownLatch功能相反,CountdownLatch阻塞主线程,等所有子线程完结了再继续下去。 上节介绍的CountDownLatch在解决多个线程同步方面相对于调用线程的join方法已经有了不少优化,但是CountDownLatch的计数器是一次性的,也就是等到计数器值变为0后,再调用CountDownIatch的await和countdown方法都原创 2022-05-18 09:49:52 · 708 阅读 · 0 评论 -
Java多线程:CountDownlatch介绍与使用(七)
JUC包中的CountDownLatch类实现线程间的通信,通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。 countDown()方法的目的就是将count值减一,并且在count值为0时,唤醒所有等待的线程,与Condition的await()方法的语义相同,该方法是阻塞式地等待,并且是响应中断的,只不过它不是在等待signal操作,而是在等待count值为0原创 2022-05-17 13:51:58 · 426 阅读 · 0 评论 -
Java多线程:线程池ThreadPoolExecutor和Executors详解(六)
线程池的创建有两种:ThreadPoolExecutor 和 Executors。 线程池不是一个提高系统的并发能力的策略,是一个更好的管理线程的方案。 另外,线程池也提供了许多可调参数和可扩展性接口,以满足不同情境的需要,可以使用更方便的Executors的工厂方法,比如newCachedThreadPool (缓冲线程池,线程池线程个数最多可达Integer.MAX_ VALUE,线程自动回收)、newFixedThreadPool (固定大小的线程池)、newSingleThreadExecutor原创 2022-05-16 16:28:06 · 1944 阅读 · 0 评论 -
Java多线程:ReentrantLock重入锁(五)
一、定义 可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。 jdk中独占锁(排它锁)的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。 二、synchronized和Reentra原创 2022-05-07 14:39:33 · 763 阅读 · 0 评论 -
Java多线程:CAS原子操作(四)
Java 并发机制实现原子操作有两种: 一种是锁,还有一种是CAS。在Java中,锁在并发处理中占据了一席之地,但是使用锁有一个不好的地方,就是当一个线程没有获取到锁时会被阻塞挂起,这会导致线程上下文的切换和重新调度开销。Java提供了非阻塞的volatile关键字来解决共享变量的可见性问题,这在一定程度上弥补了锁带来的开销问题,但是volatile只能保证共享变量的可见性,不能解决读一改一写等的原子性问题。CAS即CompareandSwap,其是JDK提供的非阻塞原子性操作,它通过原创 2022-04-14 17:16:30 · 1081 阅读 · 0 评论 -
Java多线程:并发编程(三)
进程:进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)。 线程:一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数原创 2022-04-12 22:24:36 · 2044 阅读 · 0 评论 -
Java多线程:ThreadLocal(二)
多线程访问同一个共享变量时特别容易出现并发问题,特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全,一般使用者在访问共享变量时需要进行适当的同步。原创 2022-04-10 22:32:26 · 512 阅读 · 0 评论 -
Java多线程:基础篇(一)
在讨论什么是线程前有必要先说下什么是进程,因为线程是进程中的一个实体,线程本身是不会独立存在的。进程是代码在数据集合上的一次运行活动, 是系统进行资源分配和调度的基本单位, 线程则是进程的一个执行路径, 一个进程中至少有一个线程,进程中的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的, 但是CPU 资源比较特殊, 它是被分配到线程的, 因为真正要占用CPU 运行的是线程, 所以也.原创 2022-04-08 14:09:39 · 369 阅读 · 0 评论