多线程的典型例子
来源:互联网 发布:windows上能开发iosapp 编辑:程序博客网 时间:2024/04/28 21:01
今天听一位高手说:
如果没去了解过内存模型 jsr133规范 就别说自己会多线程编程。
感觉所言不虚
例子如下:
package com.joker.thread;
public class A{
private static long num = Long.MAX_VALUE;
public static void main(String[] args){
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
new Thread(){
public void run(){
while (true) {
long l = num;
if (l != Long.MAX_VALUE && l != Long.MIN_VALUE) {
System.out.println(l);
return;
}
}
}
}.start();
new Thread(){
public void run(){
while (true) {
if (num > 0)
num = Long.MIN_VALUE;
else
num = Long.MAX_VALUE;
}
}
}.start();
}
}
这个例子在32位操作系统上,会打印出一个数字,而在64位操作系统上却不会。原因是:
就是一个线程不断的改变long值,long是64位的。
但如果你是32位jvm 在一次写入long值分了2次写
如果一个线程在读 就可能读错了 。
但如果你是32位jvm 在一次写入long值分了2次写
如果一个线程在读 就可能读错了 。
解决方法是:在num前面加上修饰符:volatile.该修饰符会在每次调用值的时候强制检查一次值。
- 多线程的典型例子
- JAVA中建立多线程的典型例子
- JAVA中建立多线程的典型例子
- JAVA中建立多线程的典型例子
- GetMemory的典型例子
- 一个典型的例子
- 典型的例子
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子
- java多线程典型例子及分析
- 存储过程的典型例子
- 一个黑洞的典型例子
- 几个典型的小例子
- MapReduce几个典型的例子
- 有关继承的典型例子
- 常量时间的栈操作(min/max)
- HDU 3062 & HDU 1824 (2-sat入门题)
- sqlhelp类
- windows paint circle
- 喵星战争(四):触摸
- 多线程的典型例子
- 电子商务之数据访问层分析(七)
- memmove源码实现
- 二叉查找树转变为排序的双向链表
- 为什么C++编译器不能支持对模板的分离式编译
- Java基础之004-面向对象
- P2P的原理和常见的实现方式
- 一篇测试文章
- 不只有Google!你还应该用的8个搜索引擎