![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 88
爱学习的老王
这个作者很懒,什么都没留下…
展开
-
Java 线程池ThreadPoolExecutor
什么是线程池为了避免系统频繁的创建和销毁线程,我们可以让创建的线程复用。在线程池当中总有几个活跃的线程,在需要使用线程的时候拿到一个空闲的线程,当工作完成了的时候,并不急这把这个线程关掉,而是把线程归还到线程池当中,方便给他人使用总而言之,在使用线程池之后,开启线程就变成了在线程池当中找到一个空闲的线程,销毁线程变成了归还线程到线程池的过程特点控制最大线程并行数量线程复用管理线程工作原理举个例子:假如CorePool等于10,maxnumPoolSize=50,阻塞队列用Arra原创 2021-11-25 20:49:42 · 519 阅读 · 0 评论 -
多线程并发工具原理解析(CountDownLatch,CyclicBarrier,Semaphore)
CountDownLatch源码解析CountDownLatch主要是两个方法:await()、countDown(),还有一个构造方法 CountDownLatch(int count)构造方法:CountDownLatch(int count) public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); //原创 2021-11-24 21:00:14 · 236 阅读 · 0 评论 -
AQS源码解析
Node节点在AQS中,是使用队列的方式来实现同步管理的,我们先来认识下队列中的Node节点数据结构在Node节点中包含:thread:一个等待获取同步状态的线程prev:指向上一个节点的引用next:指向下一个节点的引用waitStatus:等待的状态:1.CANCELLED:值尾1,表示在同步队列中等待的线程等待超时或被中断,需要从同步队列中取消等待,接入CANCELLED状态后将不会再变化2.SIGNAL:值尾-1,表示后续节点的线程处于等待状态,如果当前节点的线程释原创 2021-11-24 14:27:41 · 294 阅读 · 0 评论 -
AQS基础入门
什么是AQS?AQS是AbstractQueuedSynchronizer的简称。直译就是“抽象队列同步器”。它定义了一套多线程访问共享资源的同步框架,需要同步类实现都依赖于它,如ReentrantLock、ReentrantReadWriteLock、StampedLock、CountDownLath、CyclicBarrier等它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。state的访问方式有三种:getSt原创 2021-11-23 20:12:20 · 210 阅读 · 0 评论 -
多线程并发基础学习笔记
synchronized了解synchronizedsynchronized关键字解决的是多个线程之间访问资源的同步性问题, synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。dk1.6之前性能比较低,Java的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高。JDK1.6对锁的实现引入了大量的优化,如自原创 2021-11-11 16:05:28 · 94 阅读 · 0 评论 -
jmm学习笔记
进程与线程的区别进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序原创 2021-11-11 10:39:43 · 161 阅读 · 0 评论