计算机
青草离..秋风起
这个作者很懒,什么都没留下…
展开
-
独占锁 / 共享锁、读写锁
独占锁 / 共享锁、读写锁独占锁和共享锁读写锁案例如下独占锁和共享锁独占锁: 指该锁一次只能被一个线程所持有。对ReentrantLockSynchronized而言都是独占锁。共享锁: 指該锁可被多个线程所持有。读写锁ReadWriteLock是一个读写锁接口,ReentrantReadWriteLock类(可重入读写锁)是读写锁ReadWriteLock的一个实现类;ReentrantReadWriteLock可重入读写锁有两种模式,其写模式writeLock())是一个独占锁,其读模式(r原创 2020-08-26 17:45:20 · 385 阅读 · 0 评论 -
简单介绍 自旋锁SpinLock
自旋锁SpinLock什么是自旋锁自旋锁实现什么是自旋锁自旋锁 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁。优点:减少线程的阻塞以及线程上下文切换的的消耗。常规锁在线程获取不到锁的时候会阻塞挂起,一直等待唤醒,而从挂起到唤醒是需要经过内核态到用户态的相互转换,这样的上下文切换使性能下降。缺点:循环会消耗CPU。如果线程长期的获取不到锁,那么会一直循环,会消耗CPU。自旋锁实现自旋锁的实现需要借助CAS,因为需要通过CAS来判断当前持有锁的线程是否为null或自身。publ原创 2020-08-26 16:43:22 · 396 阅读 · 0 评论 -
可重入锁:synchronized & ReentrantLock
可重入锁什么是可重入锁?可重入锁的意义:非可重入锁会发生什么情况呢?Synchronized & ReentrantLocksynchronized案例ReentrantLock案例什么是可重入锁?可重入锁 又叫 递归锁,指当一个线程已经获得某个锁,可以再次获取锁而不会出现死锁。什么意思呢?同一个线程外层函数获得锁之后,内层递归函数也想要获得该锁,那么这个线程可以重复的获取该锁,即上了多把锁。可重入锁的意义:同一个线程多次获取锁,而不会出现死锁。非可重入锁会发生什么情况呢?当一个线原创 2020-08-26 15:35:24 · 192 阅读 · 0 评论 -
JUC:公平锁和非公平锁
公平锁和非公平锁什么是公平锁和非公平锁公平锁和非公平锁区别是什么什么是公平锁和非公平锁公平锁:当一个线程想要去获取锁时,发现该锁已经被另一个线程占用,那么该线程就要放入一个FIFO等待队列中等待,当持有锁的线程使用完时释放锁后,再根据队列的先后顺序唤醒一个线程去持有锁。即线程持有锁的顺序要讲先来后到,不能插队。非公平锁:当一个线程想要去获取锁时,发现该锁已经被另一个线程占用,那么该线程就试图去获取锁,如果获取成功就持有锁,获取失败就回到等待队列当中等待。指多个线程获取锁的顺序并不是按照申请锁的顺序原创 2020-08-25 02:51:35 · 296 阅读 · 0 评论 -
一遍了解 值传递和引用传递
值传递和引用传递基本类型对象类型案例案例分析案例1案例2案例3对于java变量的传递到底是传递值还是传递引用,一般而言,基本类型的变量是值传递;对象类型的变量是引用传递。其实引用传递也是传递的值,别懵,看完就懂!基本类型就基本类型int而言,变量a存放的就是字面值3 int a = 3; int b = a; //将a 的值复制一份,再赋值给b; a = 5;//重新修改a的值最终a和b的值为:a = 5;b = 3;b = a,其实就是把a的值拷贝一份,然后再赋值给b;因此a和原创 2020-08-25 01:36:07 · 250 阅读 · 0 评论 -
JUC:非线程安全的集合类
JUC:非线程安全的集合类故障现象导致原因解决方案VectorCollectionsCopyOnWrite容器故障现象ArrayList、HashMap、HashSet集合都不是线程安全的集合。在简单的单线编程过程中并不会发现这些集合类会出现什么线程相关的错误,而在多线程并发编程过程中如果多个线程并发的操作这些集合可能会报这样的错:java.util.ConcurrentModificationException表示并发修改异常导致原因并发争抢修改导致,参考我们的花名册签名情况。一“个人正原创 2020-08-24 02:13:08 · 365 阅读 · 0 评论 -
解析CAS算法原理
解析CAS算法原理什么是CAS?CAS原理概念实现形式底层原理案例CAS的缺点什么是CAS?CAS,全称Compare And Swap,顾名思义,比较再交换。它是一种常用于解决并发编程问题的一种思想。它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS原理概念CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会 帮我们实现出CAS汇编指令。这是一种完全依赖于原创 2020-08-23 01:11:30 · 1629 阅读 · 0 评论 -
JUC: 浅析Volatile关键字
Volatile关键字 在讲解Volatile关键字关键字之前,我们先来引入一些概念,有助于后续的理解。 JVM(java内存模型)规定:多于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,并且线程只能访问自己的工作内存,不可以访问其他线程的工作内存。 &nbs原创 2020-08-21 02:41:11 · 316 阅读 · 0 评论 -
Linux 中对 系统级I/O 的初步理解
系统级I/O打开和关闭文件读和写文件读取文件元数据共享文件I/O重定向所有的I/O设备(例如网络,磁盘和终端)都被模型化为文件,而所有的输入输出都被当做对应文件的读和写来执行。输入/输出(I/O)是在主存外部设备(例如磁盘驱动器,终端和网络)之间复制的过程。输入操作: 从I/O设备复制到主存。输出操作: 从主存复制数据到I/O设备。打开和关闭文件进程是通过调用open函数来打...原创 2019-12-02 16:06:56 · 350 阅读 · 0 评论 -
linux中对fork()的初步理解
一,fork()初识介绍fork系统调用用于创建一个新的进程,称为子进程,它与进程(系统调用fork的进程)同时运行,此进程称为父进程。创建新的进程后,然后把父进程的所有值都复制到新的子进程中,只有少数值与原来的进程的值不同。相当于克隆了一个父进程。两个进程执行fork()系统调用之后的下一条指令。fork()返回值fork()会返回一个整数值,下面是fork()返回的不同值。fork(...原创 2019-11-06 00:13:25 · 1541 阅读 · 0 评论 -
第七章:链接--可执行目标文件
可执行文件生成概述程序的转换处理过程一,预处理. 预处理命令-$gcc -E hello.c -o hello.i-$cpp hello.c > hello.i. 处理源文件中以"#“开头的预编译指令,包括:-删除"define"并展开所定义的宏-处理所以条件预编译指令,如”#if",“ifdef”,“endif"等-插入头文件到”#include"处,可以递...原创 2019-10-05 21:16:56 · 783 阅读 · 0 评论