![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
文章平均质量分 56
线程
Elephant_King
github:https://github.com/Elephant-King9
平时写的代码会上传到github,欢迎学习交流
展开
-
【线程】进程通信的方式(IPC)
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1吧数据从用户控件考到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间的通信常见的进程通信方式管道pipe无名管道有名管道消息队列MessageQueue共享存储SharedMemory信号量Semaphore套接字Socket信号sinal管道(pipe)管道是Linux中进程间通信的一种方式,他把一个程序原创 2022-02-25 18:05:06 · 924 阅读 · 0 评论 -
【线程】多线程多进程的区别与选择
对比数据共享与同步方面多进程数据共享复杂,需要用IPC(进程间通讯)数据是分开的,同步简单多线程因为共享进程数据,数据共享简单,但是也因为这个问题导致同步复杂内存、CPU多进程占用内存多,切换复杂,CPU利用率低多线程占用内存少,切换简单,CPU利用率高创建销毁切换多进程创建销毁切换复杂,速度慢多线程创建销毁切换简单,速度快编程调试多进程编程简单,调试简单多线程编程复杂,调试复杂可靠性多进程进程间不会相互影响多线程一个线程挂掉将导致整个进程挂掉原创 2022-02-25 15:13:47 · 172 阅读 · 0 评论 -
【线程】CAS的ABA问题
什么是ABA问题如何解决ABA问题通过原子引用,每次对这个数据进行操作的时候,都会使版本号加一数据版本号110213这样就可以通过版本号而不是数据的值来判断是否被修改了,也可以解决ABA问题Java中的解决方法public static void main(String[] args) { AtomicInteger a = new AtomicInteger(); //初始的原子类 a.getAndIncrement原创 2022-02-23 13:30:24 · 78 阅读 · 0 评论 -
【线程】CAS
我们先知道一个常识,在多个线程同时操作变量进行++的操作的时候,如果不加锁,肯定会导致数据错误的情况这种情况下,我们就可以通过加锁来实现并发不出错误,将要修改的方法加synchronized锁,这样同一时间只能有一个线程获得变量,这样也会导致问题在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度掩饰,引起性能问题一个线程持有锁会导致其他所有需要此锁的线程进入阻塞状态(挂起)如果一个优先级高的线程等待一个优先级低的线程会导致优先级倒置,引起性能风险这个时候选择volatile是不错的机制原创 2022-02-23 11:52:16 · 400 阅读 · 0 评论 -
【线程】Volatile关键字
Volatile是Java虚拟机提供的轻量级同步机制保证了可见性不保证原子性禁止指令重排学习之前,推荐先了解一下JMM【线程】Java内存模型JMM什么是可见性这里可以举个例子图中线程A读取了主内存中的flag变量,在线程A运行的时候,线程B将主内存中的变量读取到自己的工作内存中,将true改为false,再刷新回主内存中如果不能保证可见性,程序A会认为flag一直是true,就算实际的flag已经变成了false而在对应的flag变量上添加volatile关键字,就可以保证可见原创 2022-02-23 11:03:48 · 148 阅读 · 0 评论 -
【线程】Java内存模型JMM
什么是JMMJMM:Java内存模型,不存在的东西,是概念于规定,并不是一个框架或者系统JMM规定了所有变量都存储在驻内存中。每条线程还有自己的工作内存,线程的工作内存中保存了杯盖线程使用到的变量的猪内存副本拷贝,线程对变量的所有操作必须在工作内存中进行,而不能直接读写住内存中的变量,不同的线程之间也无法直接访问工作内存中的变量,线程间变量值的传递均需要通过主内存来完成内存间八种交互操作这些操作必须是配对操作参考文章JMM是什么??详细了解【狂神说Java】JUC并发编程最新版通俗易懂原创 2022-02-23 10:29:58 · 157 阅读 · 0 评论 -
【线程】线程池(三大方法、七大参数、四种拒绝策略)
主要就是3大方法、7大参数和4种策略三大方法创建只有一个线程的线程池Executors.newSingleThreadExecutor()创建固定线程的线程池原创 2022-02-23 09:52:09 · 560 阅读 · 0 评论 -
【线程】synchronized锁的是什么
1.synchronized作用于成员变量和非静态方法时,锁住的是对象的实力,即this对象2.synchronized作用于静态方法时,锁住的是Class实例3.synchronized作用于一个代码块时,锁住的是所有代码块中配置的对象...原创 2022-02-07 21:55:35 · 2745 阅读 · 0 评论 -
【线程】并发的三大特性
三大特性为:原子性,可见性,有序性原子性一个或者多个操作,也么全部执行,要么全部不执行,这个操作在cpu中不可以中途暂停然后再调度,即不能被中断操作例子比如i++就不是线程安全的因为i++在执行时分为四个步骤:1.将i从主存读到工作内存的副本中2.+1运算3.将结果写入工作内存4.将工作内存的值刷回主存(什么时候刷入由操作系统决定,是不确定的)在保证原子性的前提下,只能保证前三步一起执行,但是不能保证...原创 2022-01-23 18:44:13 · 622 阅读 · 0 评论 -
【线程】进程和线程的区别
参考文章【狂神说Java】JUC并发编程最新版通俗易懂_哔哩哔哩_bilibili并发编程面试题(2020最新版)_ThinkWon的博客-CSDN博客_并发编程面试题进程和线程进程:一个在内存系统中的应用程序,例如QQ.exe、Music.exe等,是一个程序的集合,每个进程都有一块自己独立的内存空间。线程:进程中执行任务的控制员,负责程序的执行。一个进程最少有一个线程,一个进程可以运行多个线程,线程之间可以共享数据线程和进程...原创 2021-12-29 17:28:36 · 277 阅读 · 0 评论 -
【线程】并发、并行、串行的区别
并发多个任务在同一个CPU核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行的。允许两个任务彼此干扰,同一时间点,只有一个任务执行,交替执行并行单位时间内,多个处理器或者多核处理器同时处理同时执行多个任务,真正意义上的同时进行。两个任务在同一时刻不受干扰的同时执行串行有n个任务,有一个线程按顺序执行。由于任务、方法都在一个线程执行所以不存在线程不安全的情况,也不存在临界区的问题也就是说,前一个任务没搞定,下一个任务就只能等着直接输出并发 = 两个队列原创 2022-01-23 17:16:10 · 977 阅读 · 0 评论 -
【线程】yield和join
yieldyield方法执行后,线程不会释放锁,而是释放了CPU的执行权,将当前执行的线程重新变为就绪状态,让CPU重新选择要执行的线程,也有可能当前线程执行完yield方法后,CPU又一次选中这个线程执行(相当于什么也没发生)join当线程A调用线程B的join,那么系统会在此时将A置于等待状态先执行线程B,等到线程B执行完成后再开始继续执行线程A...原创 2022-01-23 17:08:53 · 485 阅读 · 0 评论 -
【线程】sleep、wait的区别
sleep和wait的区别1.关于位置sleep是Thread类的静态本地方法wait是Object类的本地方法2.是否会释放锁sleep方法不会释放lock就是把cpu的执行资格和执行权释放出去,不再运行子线程,当定时的时间结束再取回cpu资源,参与cpu调度(休眠时进入超时等待状态,休眠结束后先进入等待阻塞状态,获取到锁后进入就绪状态)wait会释放lock,而且会将线程放入等待队列中 ...原创 2022-01-23 16:47:24 · 310 阅读 · 0 评论 -
【线程】线程的上下文切换
cpu通过时间片来执行任务,当一个任务的时间片用完,就会切换到另一个任务。保存上一个任务的状态,当下次再切换到该任务,就会加载这个状态任务从保存到再加载的这个过程就是一次上下文切换上下文:某一时间点CPU寄存器和程序计数器的内容,CPU通过时间片分配算法来循环实行任务(线程),因为时间片非常短,所以CPU通过不停的切换线程执行切出:一个线程被剥夺处理器的使用权而被暂停运行切入:一个线程被系统选中占用处理器开始或继续运行参考文章线程上下文切换详解_dh554112075的博客-CSDN原创 2022-01-23 16:40:55 · 722 阅读 · 0 评论 -
【线程】详解线程状态(到底是五种还是六种)
首先我们要知道,在传统(操作系统)的线程模型中线程被分为五种状态在java线程中,线程被分为六种状态传统线程模型(操作系统)中线程状态线程的五种状态:1.新建(new):创建了一个新的线程对象 2.就绪(runnable):调用线程的start()方法,处于就绪状态 3.运行(running):获得了CPU时间片,执行程序代码 就绪状态是进入到运行状态的唯...原创 2022-01-20 15:21:43 · 19877 阅读 · 5 评论 -
【线程】锁池和等待池
锁池概念: 假设线程A已经拥有了某个对象的(不是类)锁 ,而其他线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的所目前正被线程A拥有,所以这些线程就进入了该对象的锁池中,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到锁后会进入就绪队列进行等待cpu分配等待池概念: 简写一个线程A调用了某个对象的w...原创 2022-01-19 12:35:15 · 900 阅读 · 0 评论