多线程 课程内容 并发和并行 线程和进程 概念,区别 线程状态 Thread类 线程常用的方法及线程调度 sleep、yield、join、interrupet... 线程状态转化 关键字 volatile: 特征:可见性、禁止指令重排序 底层实现机制 线程同步:Synchronized 使用场景、 ...
分类:
编程语言 时间:
2020-03-03 15:00:27
阅读次数:
83
为了进一步提升计算机各方面能力,在硬件层面做了很多优化,如处理器优化和指令重排等,但是这些技术的引入就会导致有序性问题。 先告诉面试官你知道什么是有序性问题,也知道是什么原因导致的有序性问题 我们也知道,最好的解决有序性问题的办法,就是禁止处理器优化和指令重排,就像volatile中使用内存屏障一样 ...
分类:
其他好文 时间:
2020-03-03 11:01:03
阅读次数:
280
数据一致性部分借用大神“耗叔”的博客:https://coolshell.cn/articles/20793.html。 总结:volatile 关键字通过内存屏障禁止了指令的重排序,并在单个核心中,强制数据的更新及时更新到缓存。在此基础上,依靠多核心处理器的缓存一致性协议等机制,保证了变量的可见性 ...
分类:
其他好文 时间:
2020-03-02 20:44:01
阅读次数:
88
一、QThread 当要运行多线程,则需要继承该类,并重写对应的run()函数;当启动线程执行run函数的时候,则需要调用start函数;等待run函数执行完毕则是wait函数; 当在run函数中,用一个变量来标记是否一直循环执行的时候;最好该标记使用volatile 该关键字,例如:volatil ...
分类:
其他好文 时间:
2020-03-01 20:07:57
阅读次数:
80
static关键字 主要有4个使用场景:1、修饰类的成员变量和成员方法(常用): 被修饰的成员属于类,不属于单个类对象,为所有类对象所共享。 并且建议通过类名调用。被修饰的成员变量与方法存放在静态存储区。 2、 函数内的静态变量: 其作用范围为函数内,其生命期为整个程序生命期。 这样可以保证多次调用 ...
分类:
编程语言 时间:
2020-02-29 00:23:12
阅读次数:
77
Volatile关键字的作用? 让其他线程能够马上感知到某一线程对某个变量的修改。 1)保证可见性,对共享变量的修改,其他线程马上能感知到,但不能保证原子性。 2)保证有序性,在JVM的编译阶段和指令优化排序阶段,对于volatile修饰的变量,其代码顺序不会改变。 Volatile和Synchro ...
分类:
其他好文 时间:
2020-02-27 00:50:12
阅读次数:
60
synchronized 与 volatile: 可见性:一个线程对共享变量的修改,能够及时的被其他线程看到 所有的变量都储存在主内存中,每个线程独有自己独立的工作内存,里面保存着主内存中该变量的拷贝副本 线程对共享变量的操作都必须在自己的工作内存中进行不能直接在主内存中读写。不同线程中的变量值需要 ...
分类:
其他好文 时间:
2020-02-24 10:12:40
阅读次数:
77
C语言原来是没有统一的标准的,第一个标准是90左右确定的,内容较以前有些改进: 1、增加了真正的标准库; 2、新的预处理命令与特性; 3、函数原型允许在函数申明中; 4、指定参数类型一些新的关键字,包括 const、volatile 与 signed; 5、宽字符、宽字符串与多字节字符; 6、对约定 ...
分类:
编程语言 时间:
2020-02-23 09:35:28
阅读次数:
84
我的观点fail-fast是什么就不多解释了,应该注意到的是(以ArrayList为例):modCount位于AbstractList中, protected transient int modCount = 0; 并无volatile修饰,因此当两线程是共用同一个cpu时才会抛出并发修改异常。比如 ...
分类:
其他好文 时间:
2020-02-22 20:03:55
阅读次数:
83
1. volatile的作用 保证共享变量对于多线程之间的可见性 防止指令重排序 2. 计算机的组成 程序启动后,会加载到内存中 内存中会有多条指令,由pc程序计数器来记录指令地址 指令执行,内存中的数据放入寄存器,ALU运算单元计算,计算完成后返回到寄存器,然后写入到内存 3. 线程可见性 可见性 ...
分类:
其他好文 时间:
2020-02-22 14:20:23
阅读次数:
72