JAVA 内存模型温故,随笔记录
来源:互联网 发布:JAVA得到数据库表结构 编辑:程序博客网 时间:2024/05/24 05:36
详情见:http://ifeve.com/jmm-faq/
1.处理器内存模型
处理器缓存一般有俩种内存模型设计,强内存模型和弱内存模型,区别就是处理器在复杂情况下是否看到相同的值,前者可以,后者否;
弱处理器中可以使用内存屏障来刷新缓存中的值,达到强处理器的功能;但是强处理器也需要使用内存屏障指令,这个指令是不对语言开放的。
2. 在多线程程序中,编译器会对程序的执行顺序做重新排列,从而导致其他线程对这个操作的延后可读。
3.编译器能够自由的以优化的名义去改变指令顺序。在特定的环境下,处理器可能会次序颠倒的执行指令。数据可能在寄存器,处理器缓冲区和主内存中以不同的次序移动,而不是按照程序指定的顺序。
4大部分情况下,一个线程不会关注其他线程正在做什么,但是当它需要关注的时候,这时候就需要同步了。
5.没有正确的同步是指,当一个线程对同一变量有写操作,而另外的线程对这个变量有读操作,如果没有正确的同步,会导致数据竞争。
6.同步执行完成后,我们就释放了这个监视器,这个监视器有刷新缓冲区到主内存的效果,这样就会对其他线程可见,这种现象并不止对多处理器有作用,对单一处理器也有同样的效果,因为单处理器会做对程序代码的执行做优化处理。前提是在相同的监视器上做同样的操作。例如
synchronized (new Object()) {}
无效7.volatile用于线程间做信号量,适合对volatile变量写操作较少且新值不依赖旧值的应用,可以减少了线程间同步开销。synchronized适合多线程对共享变量的并发访问。
8.单例正确的方式
private static class LazySomethingHolder { public static Something something = new Something();}public static Something getInstance() { return LazySomethingHolder.something;}
0 0
- JAVA 内存模型温故,随笔记录
- 温故2:Java内存结构
- Java 温故
- JAVA内存模型(学习记录)
- java 代码随笔记录
- java 随笔记录(一)
- JAVA学习随笔记录
- 随笔记录-java并发编程
- java.包裹类.随笔记录
- 【原】java线程温故
- 温故1:Java char
- 温故java基础
- 随笔-java进行内存分析
- 温故
- CSS温故第四天【框模型】
- java内存模型 内存屏障
- Java学习记录随笔(一)
- Java内存模型
- SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)
- Linux_指令杂烩
- [IOS]轻松理解UITableViewCell的重用机制
- 矩阵原地转置算法
- 为什么要使用UML
- JAVA 内存模型温故,随笔记录
- jquery2.0动态绑定事件
- JMS与MDB
- Topcoder SRM 676 div2
- 正则表达式的使用
- Qt学习——qt软件启动界面
- ASP.NET 大文件下载的实现思路及代码
- Pic18F25K80 16位模式下的定时器0配置
- js设计模式---面向对象