Java之多线程和并发

1.volatile变量

1.1 可见性

volatile修饰符保证volatile变量对所有线程可见,当一个线程修改了volatile变量值之后,其他线程可以立即可见。

主要原理:

a.修改volatile变量,会强制将修改后的值刷新到系统主内存中;
b.修改volatile变量,会导致其他线程工作内存中对应的volatile变量值失效。其他线程再读取该volatile变量值的时候,需要重新从读取主内存中的volatile值。

1.2 有序性

volatile变量的有序性,禁止了JVM的重新排序优化,即线程内表现为串行语义。这一点可普通变量不同,普通变量可能因为因为JVM执行的优化,变量的赋值操作可能和程序中的执行顺序不一致。

1.3 非原子性

volatile变量提供了可见性和有序性,但是并不保证原子性。

2.sleep和 wait 方法区别

相同:两者都可以暂停线程;
不同之处:sleep()没有释放锁,线程会自动苏醒,而 wait()释放了锁,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法,通常用于线程间交互/通信 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第6章类文件结构 6.1 概述 6.2 无关性基石 6.3 Class类文件的结构 java虚拟机不和包括java...
    kennethan阅读 4,525评论 0 2
  • 除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性...
    胡二囧阅读 5,176评论 0 12
  • 第2章 java并发机制的底层实现原理 Java中所使用的并发机制依赖于JVM的实现和CPU的指令。 2.1 vo...
    kennethan阅读 5,282评论 0 2
  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 5,906评论 0 47
  • 一、内存模型 1. 主内存与工作内存 虚拟机运行时内存区域: 虚拟机内存模型 前者内存区域中的Java堆、栈、方法...
    路远处幽阅读 3,180评论 0 0