多线程
文章平均质量分 90
多线程总结
♛薄情痞子♛
人生无非就是笑笑别人或被别人笑笑而已。
此博客仅供个人学习而用,如有侵权,请联系我,谢谢!!
展开
-
CyclicBarrier
简介CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。注意比较CountDownLatch和CyclicBarrier:(01) CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程相互等待。(02) CountDownLatch的计数器无法被重置;Cycl转载 2021-08-04 10:53:03 · 154 阅读 · 0 评论 -
CountDownLatch
介绍一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法会使初始化的计数减一,所以在当前计数到达零之前,await()方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行CountDownLatch类的方法源码:packag..转载 2021-08-03 15:43:42 · 451 阅读 · 0 评论 -
ThreadLocal 原理
本文摘自:https://www.jianshu.com/p/c64f06f0823b https://www.cnblogs.com/cjsblog/p/9773079.html https://www.cnblogs.com/shen-qian/p/12108655.htmlThreadLocal提供了线程的局部变量(或本地变量)。它可以保证访问到的变量属于当前线程,每个访问这种变量的线程(通过它的get或set方法)都有自...转载 2021-07-28 16:50:44 · 124 阅读 · 0 评论 -
线程优先级、线程分类(用户线程、守护线程)
线程优先级java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。转载 2021-06-08 17:38:44 · 331 阅读 · 0 评论 -
线程终止方式
1. interrupt()说明2. 终止线程的方式 2.1 终止处于“阻塞状态”的线程 2.2 终止处于“运行状态”的线程3. 终止线程的示例4. interrupted() 和 isInterrupted()的区别转载 2021-06-08 15:33:50 · 747 阅读 · 0 评论 -
Semaphore信号量
Semaphore是Java里面另外一个基本的并发工具包类,主要的的作用是用来保护共享资源的访问的,也就是仅仅允许一定数量的线程访问共享资源。Semaphore维护了有限数量的许可证,只有得到了许可证的线程才能进行共享资源的访问,如果得不到许可证,说明当前共享资源的访问已经达到最大限制,所以会挂起当前线程,直到前面的线程处理完任务之后,把许可证归还,后面排队的线程才有机会获取,然后处理任务。这里面有两个注意点:(1)大多数时候使用Semaphore都应该是公平模式,默认是非公平模式,如果需要公平模式转载 2021-05-19 17:39:39 · 109 阅读 · 0 评论 -
多线程面试题
1、并发编程三要素?原子性、可见性、有序性2、实现可见性的方法有哪些?synchronized或者Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。3 、创建线程的三种方式的对比?1)采用实现Runnable、Callable接口的方式创建多线程。优势是:线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一.原创 2021-05-19 16:11:01 · 228 阅读 · 0 评论 -
多线程交替打印ABC的多种实现方法
原文链接:https://blog.csdn.net/xiaokang123456kao/article/details/77331878一、题目描述建立三个线程A、B、C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印。二、Synchronized同步法1、基本思路使用同步块和wait、notify的方法控制三个线程的执行次序。具体方法如下:从大的方向上来讲,该问题为三线程间的同步唤醒转载 2021-05-19 16:02:32 · 2711 阅读 · 1 评论 -
ReentrantLock实现原理
原文链接:https://blog.csdn.net/qq_20597727/article/details/86263237java.util.concurrent包中的工具实现核心都是AQS,了解ReentrantLock的实现原理,需要先分析AQS以及AQS与ReentrantLock的关系。这篇文章中分析了ReentrantLock#lock与ReentrantLock#unlock的实现,对于Condition的实现分析,另外文章再讲,基本上大同小异。ReentrantLock实现核心转载 2021-05-19 13:26:13 · 220 阅读 · 0 评论 -
Java中常见的锁
常见的锁公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁、非公平锁公平锁:线程获取锁的顺序是按照线程申请锁的顺序来分配的,即先来先得的FIFO先进先出顺序。非公平锁:指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反原创 2021-05-18 18:29:50 · 144 阅读 · 0 评论 -
synchronized与ReentrantLock的区别
底层实现上来说,synchronized 是JVM层面的锁,是Java关键字,通过monitor对象来完成(monitorenter与monitorexit),对象只有在同步块或同步方法中才能调用wait/notify方法,ReentrantLock 是从jdk1.5以来(java.util.concurrent.locks.Lock)提供的API层面的锁。 synchronized 的实现涉及到锁的升级,具体为无锁、偏向锁、自旋锁、向OS申请重量级锁,ReentrantLock实现则是通过利用CA..转载 2021-05-18 14:01:58 · 125 阅读 · 0 评论 -
Lock(ReentrantLock)、ReadWriteLock(ReentrantReadWriteLock)、Condition(多路通知功能)
原文链接:https://blog.csdn.net/qq_39150049/article/details/112798911目录一.synchronized的缺陷二.Lock接口的特性及基本方法接口的特性接口基本的方法:三、ReentrantLock介绍及实例ReentrantLock类常见方法:lock声明为局部变量,使用lock:lock声明为类的属性,使用locktrylock的使用lockInterruptibly的使用四、ReadWriteLoc转载 2021-05-18 13:50:59 · 733 阅读 · 0 评论 -
synchronized锁升级过程及其实现原理
本文链接:https://blog.csdn.net/wangyy130/article/details/106495180问:为什么会有锁升级的过程呢答:在java6以前synchronized锁实现都是重量级锁的形式,效率低下,为了提升效率进行了优化,所以出现了锁升级的过程。问:我们通常说synchronized锁是重量级锁,那么为什么叫他重量级锁?答:因为synchronized执行效率太低。在java1.6以前每次调用synchronized加锁时都需要进行系统调用,系统调用会涉及到用户态转载 2021-05-14 13:58:20 · 1227 阅读 · 0 评论 -
JVM-对象的创建、内存布局、访问定位
本文链接:https://blog.csdn.net/zqz_zqz/article/details/70246212对象结构在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。下图是普通对象实例与数组对象实例的数据结构:对象头HotSpot虚拟机的对象头包括两部分信息:markword第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、G转载 2021-05-13 14:22:22 · 238 阅读 · 0 评论 -
Moniter
了解这个Moniter的实现原理之前,可以说大家已经初步了解了synchronized的底层原理了。无论是同步方法还是同步代码块,无论是ACC_SYNCHRONIZED还是monitorenter、monitorexit都是基于Monitor实现的。那我们就简单了解下什么Monitor吧!!!! 本文摘自:http://47.103.216.138/archives/2030操作系统中的管程如果你在大学学习过操作系统,你可能还记得管程(monitors)在操作系统中是很重要的概念(当然我们也有.转载 2021-05-13 17:45:49 · 963 阅读 · 0 评论 -
synchronized用法、底层原理、锁升级过程及实现原理
目录synchronized的用法synchronized的实现原理synchronized与原子性synchronized与可见性synchronized与有序性synchronized与锁优化synchronizedy用法修饰实例方法,对当前实例对象this加锁 修饰静态方法,对当前类的Class对象加锁 修饰代码块,指定加锁对象,对给定对象加锁public class SynchronizedDemo { //同步实例方法,对当前实例对象加锁 ...原创 2021-05-13 14:51:59 · 217 阅读 · 0 评论 -
线程池
原文链接:https://blog.csdn.net/u013541140/article/details/95225769目录:1 线程池的优势2 线程池的使用3 线程池的工作原理4 线程池的参数4.1 任务队列(workQueue)4.2 线程工厂(threadFactory)4.3 拒绝策略(handler)5 功能线程池5.1 定长线程池(FixedThreadPool)5.2 定时线程池(ScheduledThreadPool )5.3 可缓存线程池转载 2021-05-13 00:24:31 · 79 阅读 · 0 评论 -
sleep、wait、yield、join
原文链接:https://blog.csdn.net/ywlmsm1224811/article/details/94022647sleepsleep 方法是属于Thread 类中的,sleep 过程中线程不会释放锁,只会阻塞线程,让出cpu给其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态,可中断,sleep 给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会示例代码:/*** 线程sleep测试** @author...转载 2021-05-12 10:08:53 · 96 阅读 · 0 评论 -
Volatile关键字
在学习volatile之前,我们需要先了解下线程在java内存里面执行的原理:每个线程获取到CPU的时钟区间之后,会从ready状态->running状态,在x86处理器下,每个线程在执行的时候,不会直接读取主内存,而是会在每个CPU的高速缓存里面读取数据,每次CPU在执行线程的时候,会将需要的数据从主内存读取到高速缓存中。堆内存是线程共享的,对于上图中的running变量可称之为共享变量,而线程在工作时有自己的工作内存,对于共享变量running来说,线程1和线程2在运行的时候先把run原创 2021-05-11 16:47:20 · 73 阅读 · 0 评论 -
线程的基本状态和创建方式
线程的生命周期及五种基本状态一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread...原创 2019-03-16 16:56:22 · 254 阅读 · 0 评论