第14章 多线程(17)互斥锁、条件锁、自旋锁
原创
©著作权归作者所有:来自51CTO博客作者钰娘娘ynn的原创作品,请联系作者获取转载授权,否则将追究法律责任
互斥锁
多个线程不能同时进入指定范围,如synchronized/Lock 这些方式都是互斥锁,不同线程不能同时进入 synchronized Lock 设定锁的范围
例子:
条件锁
Object 的 wait(),Condition 的 await()
自旋锁
比较典型的是原子类的操作,同时进行获取更新时会进行(CAS:compareAndSet),获取更新值,返回一个值
上面的部分类似于 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是加一后的新值
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
相关内容:选择 《Java核心技术 卷1》查找相关笔记
评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步
公众号 钰娘娘知识汇总