第一章 并发编程基本概念

本文介绍了Java并发编程的三个关键概念:原⼦性、可⻅性和有序性。原⼦性确保操作不被打断,如Java的Atomic类操作。可⻅性保证线程间共享变量的修改能被其他线程立即看到,volatile关键字可保证可⻅性。有序性涉及到指令重排序,Java内存模型通过内存屏障防止特定类型的重排序。文章还探讨了内存模型、重排序和内存屏障的重要性,并强调了volatile在避免重排序中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

并发编程基本概念

一、原⼦性

⼀个操作或者多个操作,要么全部执⾏并且执⾏的过程不会被任何因素打断,要么就都不执⾏。

原⼦性是拒绝多线程操作的,不论是多核还是单核,具有原⼦性的量,同⼀时刻只能有⼀个线程来对它进⾏操作。 简⽽⾔之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原⼦性。例如 a=1是原⼦性操作,但是 a++和a +=1就不是原⼦性操作。

Java中的原⼦性操作包括:

  • 基本类型的读取和赋值操作,且赋值必须是值赋给变量,变量之间的相互赋值不是原⼦性操作;
  • 所有引⽤reference的赋值操作;
  • java.concurrent.Atomic.* 包中所有类的⼀切操作。

二 、可⻅性

指当多个线程访问同⼀个变量时,⼀个线程修改了这个变量的值,其他线程能够⽴即看得到修改的值。

在多线程环境下,⼀个线程对共享变量的操作对其他线程是不可⻅的。Java提供了volatile来保证可⻅性,当⼀个变 量被volatile修饰后,表示着线程本地内存⽆效,当⼀个线程修改共享变量后他会⽴即被更新到主内存中,其他线 程读取共享变量时,会直接从主内存中读取。当然,synchronize和Lock都可以保证可⻅性。synchronized和Lock 能保证同⼀时刻只有⼀个线程获取锁然后执⾏同步代码,并且在释放锁之前会将对变量的修改刷新到主存当中。因 此可以保证可⻅性。

三、有序性

即程序执⾏的顺序按照代码的先后顺序执⾏。

Java内存模型中的有序性可以总结为:如果在本线程内观察,所有操作都是有序的;如果在⼀个线程中观察另⼀个 线程,所有操作都是⽆序的。前半句是指“线程内表现为串⾏语义”,后半句是指“指令重排序”现象和“⼯作内存主主 内存同步延迟”现象。 在Java内存模型中,为了效率是允许编译器和处理器对指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟码神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值