第14章 多线程(17)互斥锁、条件锁、自旋锁_自增

 

第14章 多线程(17)互斥锁、条件锁、自旋锁_开发语言_02

 互斥锁

多个线程不能同时进入指定范围,如synchronized/Lock 这些方式都是互斥锁,不同线程不能同时进入 synchronized Lock 设定锁的范围

例子:

第14章 多线程(17)互斥锁、条件锁、自旋锁_自增_03

 条件锁

Object 的 wait(),Condition 的 await()

第14章 多线程(17)互斥锁、条件锁、自旋锁_自增_04

 自旋锁

比较典型的是原子类的操作,同时进行获取更新时会进行(CAS:compareAndSet),获取更新值,返回一个值

第14章 多线程(17)互斥锁、条件锁、自旋锁_开发语言_05

上面的部分类似于 i++,下面的类似于++I

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

import java.util.TreeSet;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;


public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException {
AtomicInteger ai = new AtomicInteger(1);
System.out.println(ai.get());
System.out.println(ai.updateAndGet(o->o+1));
System.out.println(ai.get());
System.out.println(ai.getAndUpdate(o->o+1));
System.out.println(ai.get());
}
}

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

执行结果:

初始为1

前自增,先加一再返回值,所以第二第三行为2

后自增,先返回再加一,所以第四第五行值不同,2是加1前返回的旧值,3是加一后的新值

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

第14章 多线程(17)互斥锁、条件锁、自旋锁_自增_06

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步

公众号 钰娘娘知识汇总 

第14章 多线程(17)互斥锁、条件锁、自旋锁_java_07