自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 CAS无锁自旋

CAS:Compare and Swap 比较并且交换日常编码过程中,基本不会直接用到 CAS 操作,都是通过一些JDK 封装好的并发工具类来使用的,在 java.util.concurrent 包下CAS是一种无锁算法,它的功能是判断内存某个位置的值是否为预期值,如果是则改为新值,否则重新循环去执行这个操作(自旋),或者什么都不做,这个过程是原子的在volatile int i = 0; i++中,volatile类型的读写是原子同步的,但是i++却不能保证同步性,我们该怎么呢?可以..

2021-09-10 18:05:10 85

原创 锁优化方面

synchronized 细化 : 锁的代码越少越好,避开那些不相关的业务逻辑代码synchronized 粗化 : 多次加锁操作在JVM内部也是种消耗,如果多个加锁可以合并为一个锁,就可减少不必要的开销分段锁,分段锁也并非一种实际的锁,而是一种思想;ConcurrentHashMap是学习分段锁的最好实践。主要是将大对象拆成小对象,然后对大对象的加锁操作变成对小对象加锁,增加了并行度锁定某个对象o ,如果o的属性发生改变,不影响锁的使用但是如果o变成另一个对象,则锁定的对象发生改变应该避

2021-09-10 18:04:37 51

原创 Volatile关键字

1.保证线程可见性 不可见:两个线程 当一个线程操作这个值,其他线程不知道,用的还是原来的值 底层用了 cpu的缓存一致性协议2.禁止指令重排序 不是禁止cpu的指令排序单例:就是保证在JVM内存里,永远只有某一个类的一个实例双重检查 , 加Volatile重点,不加Volatile 问题就会出现在指令重排序上,一般并发超高的时候才会出现锁细化:加锁给少量代码,不用锁住一个方法如果两个线程同时都判断 instance 为null了 ,一个线程加锁完释放掉后,另一个线程...

2021-09-10 18:04:00 76

原创 synchronized底层实现

synchronized锁的是对象不是代码锁定方法和非锁定方法可以同时执行synchronized(Object){-不能用String常量 ,Integer ,Long 等基础数据类型}因为 万一你把一个类库的值锁住了,别人也锁住了 会出现死锁锁升级--偏向锁 :第一个 去访问某把锁的线程,是没有给Object加锁的,只记录这个线程的id 如果线程争用,升级为自旋锁 , 两个线程一个线程占着锁,另一个线程自旋自旋锁:不会进入就绪队列,会一直占用cpu,自旋10...

2021-09-10 18:03:18 87

原创 synchronized

多个线程访问同一个资源的时候,需要对这个资源进行上锁加锁:如果有线程想访问资源的时候,看这个锁是不是属于我,如果属于我才可以执行这段代码锁的特性:public synchronized void m(){ //等同于在方法的代码执行时 要synchronized(this)}||public void m(){ synchronized(this){ //任何线程要执行下面的代码,必须先拿到this的锁 }}public synchronized sta...

2021-09-10 18:02:32 45

原创 线程的基本状态

这个不全 看看面试题sleep:当前线程睡眠一段时间,让给别的线程去运行yield:让出一下cpu,返回到就绪状态join:等待另一个线程执行完 再继续执行现在的线程一、new状态:new Thread();二、Runable 状态包括这两个:1.Ready 就绪状态:就是我们把要执行的线程扔到等待队列里去,排着队,等着cpu运行2.Running:线程被调度器选中执行,就是真正扔到cpu上运行的时候 Ready ---线程被调度器选中执行--->Running ...

2021-09-10 17:36:58 133 2

原创 什么是线程

什么是线程,什么是进程,--什么是协程/纤程:程序:就是操作系统的一个 可执行文件 比如QQ.exe进程:操作系统进行资源分配的基本单位线程:在进程的内部,是调度执行的基本单位(多个线程之间共享这个分配的资源)线程是在进程的内部,是进程的最小执行单位程序是在硬盘上的,等他真正执行的时候,他会把这个文件的相关信息Load到内存里,叫做一个进程,就可以给他分配程序执行所需要的资源了,一个程序可以有多个进程,真正开始执行的时候程序是以线程为基本单位开始执行,操作系统会找到这个进程的主线程m.

2021-09-10 17:32:07 295

原创 多线程面试题

一、单核cpu设定多线程是否有意义:有意义,打比方有一个程序,在运行,他里面有好多要执行的线程,但并不是所有的线程都会一直消耗cpu,比如这个线程sleep了,那这段时间就可以让给别的线程运行,这样就能充分的利用cpu的资源 二、工作线程数是不是设置的越大越好?不是,因为线程之间的切换也是需要消耗资源的 三、实现线程的五种方式:带返回值的只需要有Future、Callable 或者 Futuretask就行1、继承Thread...

2021-09-10 17:28:19 47

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除