博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
马士兵java多线程
阅读量:2777 次
发布时间:2019-05-13

本文共 595 字,大约阅读时间需要 1 分钟。

 

 

 

查看java扩展属性的相关参数

java -XX:+PrintFlagsFinal -version | grep Thread

 

添加volatile关键字保证线程可见性,是否相当于while处在读取running的时候每次都去内存中取一次running的值?

计算机组成

 

线程是CPU执行的基本单位

进程是CPU分配资源的基本单位

单核单线程,线程间切换成本高

超线程,一个alu对应2组pc和registers,只需要切换alu即可,执行效率更高了

CPU读出内存数据是按块读取的,x被访问导致与其相邻的y被读取的可能性大大提高了,所以会按块读取x及其相邻的数据

这个数据块就是cache line,单位为64字节,当达到64字节后,会用新的cache line,这时线程a修改x后,就不会通知线程b重新读取了,提高了执行效率。这就是缓存行对齐,discurptor的源码中就使用了这样的方式。

 无论从前面读取还是从后面读取,cursor都会单独存在cache line中,不用通知其他线程重新从内存读取该值,提供执行效率

标记了volatile后,cpu就会保存数据一致性(ai进程修改数据后,通知b进程数据已被修改,需重新读取,来保证一致性)

 

CPU乱序执行

 

 

同一个线程可以锁2次,就是重入锁(如果不实现重入锁,子类无法调用父类的方法)

 

基础:

 

推荐书籍:

Linux内核设计与实现

转载地址:http://stfld.baihongyu.com/

你可能感兴趣的文章
1002. A+B for Polynomials (25)
查看>>
学习C++的50条忠告
查看>>
蓝桥杯入门训练全部试题(C++)
查看>>
杨辉三角形
查看>>
特殊回文数
查看>>
十进制转十六进制
查看>>
回文数
查看>>
特殊的数字
查看>>
字母图形
查看>>
数列特征
查看>>
查找整数
查看>>
闰年判断
查看>>
01字串
查看>>
十六进制转八进制
查看>>
十六进制转十进制
查看>>
数列排序
查看>>
与2,3,5无关的数
查看>>
在C++里面使用++i 还是i++比较好???
查看>>
在C++里面诸如 *iter++这样的形式是一种规范的写法吗?
查看>>
数字三角形
查看>>