![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 75
NeverOW
这个作者很懒,什么都没留下…
展开
-
JUC并发编程-线程池简介
线程池简介线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超过数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。优点主要特点为:线程复用、控制最大并发数、管理线程降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,原创 2022-01-29 21:03:15 · 455 阅读 · 0 评论 -
JUC并发编程-生产者消费者实例
生产者消费者实例1.ReentrantLock实现public class Demo { public static void main(String[] args) { Data data=new Data(); //两个生产者线程 for (int i = 0; i < 2; i++) { new Thread(()->{ try {原创 2022-01-29 21:01:38 · 2310 阅读 · 0 评论 -
JUC并发编程-同步器框架
同步器框架CountDownLatch详解简介CountDownLatch底层也是由AQS,用来同步一个或多个任务的常用并发工具类,强制它们等待由其他任务执行的一组操作完成。CountDownLatch 是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用 countDown() 方法时,其实使用了tryReleaseShared方法以 CAS 的操作来减少 state,直至 state 为 0 。当调用 await() 方法的时候,如果 state 不为 0,那原创 2022-01-29 21:01:08 · 2192 阅读 · 0 评论 -
JUC并发编程-锁分类
锁分类公平和非公平锁并发包中ReentrantLock的创建可以指定构造函数的boolean类型来决定是公平锁还是非公平锁,默认是非公平锁公平锁公平锁,在并发环境下,每个线程在获取锁的时候会去查看此锁维护的等待队列,如果为空,或者当前线程为等待队列的第一个,就占有锁,否则加入到等待队列里,然后按照FIFO(先进先出)的规则等待非公平锁不公平,上来就直接尝试占有锁,就想插队,如果插不上,就再采用类似公平锁的方式,例如synchronized可重入锁(又名递归锁)指同一个线程在获得锁之原创 2022-01-29 11:25:51 · 1229 阅读 · 0 评论 -
JUC并发编程-不安全的集合类
不安全的集合类Listpublic class NoSafeList { public static void main(String[] args) { List<String> list=new ArrayList<>(); for (int i = 0; i < 15; i++) { new Thread(()->{ list.add(UUID.randomUU原创 2022-01-29 11:07:35 · 2385 阅读 · 0 评论 -
JUC并发编程-CAS
CAS什么是CAS简介Compare And Set(或Compare And Swap),CAS是解决多线程并行情况下使用锁造成性能损耗的一种机制,采用这种无锁的原子操作可以实现线程安全,避免加锁的笨重性。操作CAS操作包含三个操作数:**内存位置(V)、预期原值(A)、新值(B)。**如果内存位置的值与预期原值相等,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。(简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有原创 2022-01-27 22:54:46 · 292 阅读 · 0 评论 -
JUC并发编程-Lock锁
Lock详解简介java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的)Lock和ReadWriteLock是两大锁的根接口:Lock代表实现类是ReentrantLock(可重入锁)ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock同步实现原理lock只能被一个线程获取,当一个线程执行lock.lock()后其他线程再尝试获取会进入lock对象中的等待队列,从而达到同步效果,ReenT原创 2022-01-27 22:53:42 · 1479 阅读 · 1 评论 -
JUC并发编程-Synchronized详解
Synchronized详解简介在应用Sychronized关键字时需要把握如下注意点:一把锁只能同时被一个线程获取,没有获得锁的线程只能等待;对象锁:每个实例都对应有自己的一把锁(this)叫做,不同实例之间互不影响;类锁:锁的对象是*.class以及synchronized修饰的是static方法的时候,所有对象公用同一把锁synchronized修饰的方法,无论方法正常执行完毕还是抛出异常,都会释放锁锁对象对象锁包括方法锁(默认锁对象为this,当前实例对象)和同步代原创 2022-01-26 19:14:31 · 524 阅读 · 0 评论 -
JUC并发编程-volatile详解
volatile详解三大特性1.保证可见性可见性问题主要指一个线程修改了共享变量值,而另一个线程却看不到。引起可见性问题的主要原因是每个线程拥有自己的一个高速缓存区——线程工作内存。volatile关键字能有效的解决这个问题package TestVolatile;public class TestVolatile { public static void main(String[] args) throws InterruptedException { Data da原创 2022-01-26 19:11:55 · 420 阅读 · 0 评论 -
JUC并发编程-线程通信
三种使用线程方法有三种使用线程的方法:实现 Runnable 接口;实现 Callable 接口;继承 Thread 类。实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。实现 Runnable 接口需要实现接口中的 run() 方法。public class MyRunnable implements Runnable { @Ove原创 2022-01-25 10:22:54 · 113 阅读 · 0 评论 -
JUC并发编程-理论基础
理论基础为什么需要多线程先从总体上来说:从计算机底层来说: 线程可以比作是轻量级的进程,是程序执行的最小单位,线程间的切换和调度的成本远远小于进程。另外,多核 CPU 时代意味着多个线程可以同时运行,这减少了线程上下文切换的开销。从当代互联网发展趋势来说: 现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。再深入到计算机底层来探讨:众所周知,CPU、内存、I/O 设备的速度是有极大差异的,原创 2022-01-25 10:18:22 · 265 阅读 · 0 评论