并发编程
文章平均质量分 70
纵我不往''
这个作者很懒,什么都没留下…
展开
-
线程和之间的通讯方式、进程之间的通讯方式、线程之间如何同步
条件变量的方法是,当线程在等待某些满足条件时使线程进入睡眠状态,一旦条件满足,就唤醒,这样不会占用宝贵的互斥对象锁,实现高效条件变量允许线程阻塞并等待另一个线程发送信号,一般和互斥锁一起使用。互斥锁 是最常见的线程同步方式,它是一种特殊的变量,它有 lock 和 unlock 两种状态,一旦获取,就会上锁,且只能由该线程解锁,期间,其他线程无法获取。读写锁处于读模式的锁(未加锁)状态时,有另外的线程试图以写模式加锁,则读写锁会阻塞读模式加锁的请求,这样避免了读模式锁长期占用,导致的写模式锁长期阻塞的情况;原创 2023-08-30 16:56:54 · 172 阅读 · 0 评论 -
原子操作的原理和实现
它包含了三个参数:V,A,B。其中,V表示要读写的内存位置,A表示旧的预期值,B表示新值。CAS指令执行时,当且仅当V的值等于预期值A时,才会将V的值设为B,如果V和A不同,说明可能是其他线程做了更新,那么当前线程就什么都不做,最后,CAS返回的是V的真实值。流水线就会先将所有任务中的相同的基本指令一起执行完之后,再更换线路来执行其他相同的指令,这样减少了线路的切换,而线路切换需要的时间很长)(流水线可能导致顺序错乱问题,在同一个线程中,代码的底层执行顺序可能是乱的,可能执行顺序是先第二行再第一行)原创 2023-08-30 15:48:47 · 157 阅读 · 0 评论 -
锁的升级(Synchronized重量级转换)详细介绍
如果成功,当前线程获得锁,如果失败,表示其他线程竞争锁,当前线程便尝试使用自旋来获取锁。是一种简化的加锁和释放锁的过程。加偏向锁之后,当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程ID,以后该线程在进入和退出同步块时不需要进行CAS操作来加锁和解锁,只需简单地测试一下对象头的Mark Word里是否存储着指向当前线程的偏向锁。所以当高并发时,竞争锁失败时进入阻塞队列,在就绪队列全部释放锁后,从阻塞队列挑一个执行,虽然加锁释放锁的过程麻烦,但是对cpu的损耗少,总体时间少。原创 2023-08-30 15:40:52 · 113 阅读 · 0 评论 -
synchronized、volatile关键字详解
a.重量级锁,功能完整的锁b.修饰类、方法、静态方法、代码块,但不可以在声明的时候修饰c.synchronized是实现同步的基础,Java中不管是对象还是方法,都可加上锁。synchronized分为三种:对于普通同步方法,锁是当前实例对象。①、在一个线程访问一个对象中一个加synchronized的非静态方法时,会将整个对象都锁住。整个对象中加锁的方法之间都互斥,加锁的和不加锁的不互斥。加锁的方法之间不能在两个线程之间同时运行,需要一个运行完另一个在运行。原创 2023-08-30 15:28:50 · 90 阅读 · 0 评论 -
线程池的创建和使用
加上@Configuration:告诉spring这是个配置类,需要在启动的时候加载@Bean//ExcutorService线程池这里的意思是: 在启动的时候创建这个类的这个方法,这个方法会返回一个对象,把这个对象交给spring去管理。原创 2023-08-10 15:20:05 · 361 阅读 · 0 评论 -
多线程并发---线程池的使用原理和相关参数
多线程并发----线程池原创 2023-06-29 19:11:29 · 65 阅读 · 1 评论 -
并发编程(2)---创建线程的四种方式
并发编程(2)---创建线程的四种方式原创 2023-07-24 09:32:08 · 36 阅读 · 0 评论 -
并发编程(3)---如何查看线程信息
并发编程(3)---如何查看线程信息原创 2023-07-24 10:00:25 · 66 阅读 · 0 评论 -
并发编程(1)---基本定义(线程、方法区、堆、栈、线程)
并发编程中所用的基本定义,包括线程、方法区、堆、栈、线程等原创 2023-07-11 00:27:38 · 43 阅读 · 0 评论