Home Blogs Readings Notes Jupyter Seafile

java thread

=============

22 Jan 2018

要汇总的几个知识点:

起源:

多线程处理时缓存一致性,从高速缓存到主内存 处理器乱序执行优化

Java内存操作模型

JVM:定义了java虚拟机变量到主机内存的访问协议。 线程内存包含了线程所用到的所有变量的主内存copy

内存操作8动作:

volatile

Java内存模型原子性,可见性,有序性

可见性是指当一个 线程修改了共享变量的值,其他线程能够立即得知这个修改。 volatile
synchronized
final,初始化完成后,不会修改

Java线程模型

Java线程调度

线程状态

new,runnable(running, ready),waiting,blocked(线程等待获锁),terminated

线程安全

多线程访问一个对象而不需要考虑调度执行和同步操作,或者说用任何方式调用都能获得正确结果,那么这个对象就是线程安全的

不可变,绝对线程安全、 相对线程安全、 线程兼容 和 线程对立。

如何实现线程安全?

任意时候可中断的代码,只包含threadlocal变量

锁优化

自适应自旋(不阻塞挂起等待解锁),消除(堆上的所有数据都不会逃逸出去从而被其他线程访问到,那就可以把它们当做栈上数据 对待),粗化,轻量级锁(CAS+对象头,基于大部分锁无竞争),偏向锁(进一步去掉CAS)

-->
Fork me on GitHub